powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase SA12, 16: Странная ошибка выполнения запроса
5 сообщений из 5, страница 1 из 1
Sybase SA12, 16: Странная ошибка выполнения запроса
    #38438396
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

Есть две таблицы:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE "DBA"."TEST1" (
        "ID1" INTEGER NOT NULL,
        "CSTR" CHAR(10) NULL,
        PRIMARY KEY ( "ID1" ASC )
);

и
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE "DBA"."TEST2" (
        "ID2" INTEGER NOT NULL,
        "SUBITEM" INTEGER NULL,
        "ORGANIZNAME" CHAR(180) NOT NULL,
        PRIMARY KEY ( "ID2" ASC )
);


Есть две UDF:
запрос с with
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE FUNCTION dba.FTest1(in nVal integer)
RETURNS Long VarChar
DETERMINISTIC
BEGIN
 DECLARE ret Long VarChar;

 with recursive CHECK1(ID2, SUBITEM) as 
 (
 (select 
   TEST2.ID2, 
   TEST2.SUBITEM 
  from dba.TEST2
  where TEST2.ID2 = nVal
  )
 union all
 (select 
   TEST2.ID2, 
   TEST2.SUBITEM 
  from dba.TEST2
  join CHECK1 on (TEST2.SUBITEM = CHECK1.ID2 and TEST2.SUBITEM is not null))  
 )
 select LIST(ID2) into ret from CHECK1;

 RETURN ret;
END

и запрос без with
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE FUNCTION dba.FTest2(in nVal integer)
RETURNS Long VarChar
DETERMINISTIC
BEGIN
 DECLARE ret Long VarChar;
 select LIST(TEST2.ID2) into ret from dba.TEST2;
 RETURN ret;
END



Выполняю в ISQL на Sybase SA 12.0.1.3924 (и младше) или на Sybase SA 16.0.0.1324
запрос
Код: sql
1.
select dba.FTest1(TEST1.ID1) from dba.TEST1

- все выполняется нормально.

Выполняю в ISQL на Sybase SA 12.0.1.3942 (и выше) или на Sybase SA 16.0.0.1644
этот же запрос
Код: sql
1.
select dba.FTest1(TEST1.ID1) from dba.TEST1

- при выполнении получаю ошибку:
Could not execute statement.
Корреляционное имя 'TEST1' не найдено
SQLCODE=-142, ODBC 3 State="42S02"
Line 1, column 1
Хотя если этот же запрос с другой UDF
Код: sql
1.
select dba.FTest2(TEST1.ID1) from dba.TEST1

выполнить на Sybase SA 12.0.1.3942 (и выше) или на Sybase SA 16.0.0.1644 то ошибка не происходит.
Все отличие тут в том, что в FTest1 запрос с with, а в FTest2 запрос без with.
Так же ошибка не происходит, если вместо dba.FTest1(TEST1.ID1) сделать dba.FTest1(<любое число>).

Вопрос: Почему эта ошибка стала происходить в последних версиях Sybase SA 12.x и 16.x ? Это ошибка самого Sybase SA или это я что то не так делаю ? Ведь в ранних версиях Sybase SA 12.x и 16.x
запрос с dba.FTest1(TEST1.ID1) работает без ошибок.



Заметил еще один момент:
Запрос
Код: sql
1.
select TEST1.ID1 as X1, dba.FTest1(X1) from dba.TEST1

выдает ошибкуCould not execute statement.
Столбец 'X1' не найден
SQLCODE=-143, ODBC 3 State="42S22"
Line 1, column 1
на всех билдах Sybase SA 12.x и 16.x.
Хотя этот же запрос с другой UDF
Код: sql
1.
select TEST1.ID1 as X1, dba.FTest2(X1) from dba.TEST1

выполняется без ошибок.

Опять же не понятно, почему в случае FTest1 столбец 'X1' не найден. Почему эта ошибка происходит ?
...
Рейтинг: 0 / 0
Sybase SA12, 16: Странная ошибка выполнения запроса
    #38443311
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжаю разбираться с этой ошибкой.

Похоже что эта ошибка связанна с оптимизатором Sybase SA 12, 16.

Если в dba.FTest1 запрос с with окружить пустым условием (if 1 = 1 then <запрос> endif), то есть что бы эта UDF не участвовала в общей оптимизации запроса, то ошибка пропадает.

P.S. Может All может связаться с разработчиками и послать им это сообщение об ошибке или хотя бы подскажет как это можно сделать мне ?
...
Рейтинг: 0 / 0
Sybase SA12, 16: Странная ошибка выполнения запроса
    #38465638
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Up ...

Так что, All может что то сказать по этим вопросам ?
...
Рейтинг: 0 / 0
Sybase SA12, 16: Странная ошибка выполнения запроса
    #38465809
Марсель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Sybase SA12, 16: Странная ошибка выполнения запроса
    #38466552
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Марсель,

Спасибо за ответ.

По поводу вашей первой ссылки:

Насчет "воды" внутри SP я и сам догадался, что видно из моего второго сообщения в этой теме.
Но вопрос, который я задал в этом теме, все равно ведь остается. Что мешает Sybase SA нормально обрабатывать такие запроса ? Ведь в версиях Sybase SA 12.0.1.3924 (и младше) или на Sybase SA 16.0.0.1324 по крайней мере первый запрос выполнятся нормально ...
А после последних двух обновлений он вдруг перестал работать.

Кстати, разве aid и aID не одно и тоже (с поправкой на регистр конечно) ? Они ведь не заключены в двойные кавычки ...

По поводу "2 последних примеров из второй ссылки":

Ничего особенного я там не увидел ...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase SA12, 16: Странная ошибка выполнения запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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