|
Глючит хранимая процедура
|
|||
---|---|---|---|
#18+
Здравствуйте. Проблема такая. Создаю не сложную ХП, компилю. Допустим у нее 3 вход. параметра varchar. Вроде бы работает, но правильно - только первый раз после компиляции !!! т.е. первый раз делаешь выборку с параметрами X, Y, Z, например, выдает все Ок, все остальные выборки с любыми другими параметрами дают аналогичный первому вариант. Я уже голову сломал. Самое интересное, что не со всеми так процедурами. Получается что-то вроде кеша. После перекомпиляции без изменений тела процедуры можно опять выполнить ХП с корректным результатом. Вот такая вот петрушка. Кстати стоит у меня Yaffil, пробовал FireBird - то же самое - слишком очевидная бага - чтобы проблема была в сервере как мне кажется. Спасибо. С уважением, Максим ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2003, 09:44 |
|
Глючит хранимая процедура
|
|||
---|---|---|---|
#18+
Решил проблему !!! Я вспомнил в чем дело - была у меня уже такая штука!!! ОБРАТИТЕ ВНИМАНИЕ !!! У Вас может быть такое же ! В ХП не работют вложеные запросы !!!!!! ХП, выбирающая список 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 то происходит то, что я описывал в предыдущем вопросе. Кстати, у меня были еще какие-то глюки с ХП, где были вложенныые селекты. И опять же проблема решалась созданием временных переменных. ВОТ ТАК, друзья. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2003, 11:01 |
|
Глючит хранимая процедура
|
|||
---|---|---|---|
#18+
Странно, у меня работают вложенные запросы.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2003, 11:28 |
|
|
start [/forum/topic.php?fid=40&fpage=526&tid=1580803]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
103ms |
get tp. blocked users: |
2ms |
others: | 484ms |
total: | 677ms |
0 / 0 |