powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Глючит хранимая процедура
4 сообщений из 4, страница 1 из 1
Глючит хранимая процедура
    #32113246
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Проблема такая.

Создаю не сложную ХП, компилю. Допустим у нее 3 вход. параметра varchar.
Вроде бы работает, но правильно - только первый раз после компиляции !!! т.е. первый раз делаешь выборку с параметрами X, Y, Z, например, выдает все Ок, все остальные выборки с любыми другими параметрами дают аналогичный первому вариант.
Я уже голову сломал. Самое интересное, что не со всеми так процедурами. Получается что-то вроде кеша. После перекомпиляции без изменений тела процедуры можно опять выполнить ХП с корректным результатом.

Вот такая вот петрушка.
Кстати стоит у меня Yaffil, пробовал FireBird - то же самое - слишком очевидная бага - чтобы проблема была в сервере как мне кажется.

Спасибо.

С уважением, Максим
...
Рейтинг: 0 / 0
Глючит хранимая процедура
    #32113247
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проблему !!!
Я вспомнил в чем дело - была у меня уже такая штука!!!
ОБРАТИТЕ ВНИМАНИЕ !!! У Вас может быть такое же !

В ХП не работют вложеные запросы !!!!!!

ХП, выбирающая список ID фирм из таблицы firms,
по трем параметрам (город, район, улица).


table firms
----------
firm_id
street_id ---> внешние ключи на табл. street
district_id ---> внешние ключи на табл. district
city_id ---> внешние ключи на табл. city
...
...


Привожу рабочий вариант:

CREATE PROCEDURE GET_FIRM_IN_ADDRESS (
CITY_NAME VARCHAR(20),
DISTRICT_NAME VARCHAR(20),
STREET_NAME VARCHAR(20))
RETURNS (
FIRM_ID INTEGER)
AS
DECLARE VARIABLE ITEMP INTEGER;
DECLARE VARIABLE ICITY INTEGER;
DECLARE VARIABLE IDISTRICT INTEGER;
DECLARE VARIABLE ISTREET INTEGER;
begin

// выбираем ID из справочников во временные переменные
SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME INTO :ICITY;
SELECT DISTRICTS_ID FROM DISTRICTS WHERE NAME = :DISTRICT_NAME INTO :IDISTRICT;
SELECT STREETS_ID FROM STREETS WHERE NAME = :STREET_NAME INTO :ISTREET;

for
select firm_id from firms where
city_id = :ICITY and
district_id = :IDISTRICT and
street_id = :ISTREET
into :itemp
do
begin
firm_id = :itemp;
suspend;
end


end

-----------------------
если то же самое сделать через вложенные select, типа

select firm_id from firms where
city_id = (select city_id from city where name = :city_name) and
district_id = (select district_id from district where name = :district_name) and
street_id = (select street_id from street where name = :street_name)
into :itemp

то происходит то, что я описывал в предыдущем вопросе.

Кстати, у меня были еще какие-то глюки с ХП, где были вложенныые селекты.
И опять же проблема решалась созданием временных переменных.

ВОТ ТАК, друзья.
...
Рейтинг: 0 / 0
Глючит хранимая процедура
    #32113483
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, у меня работают вложенные запросы....
...
Рейтинг: 0 / 0
Глючит хранимая процедура
    #32113591
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты уверен, что это бага - шли баг репорт. Сделаешь великое добро, если это бага, в чём я сомневаюсь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Глючит хранимая процедура
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]