Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase SA12, 16: Странная ошибка выполнения запроса / 5 сообщений из 5, страница 1 из 1
23.10.2013, 14:46
    #38438396
Stalker4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SA12, 16: Странная ошибка выполнения запроса
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
28.10.2013, 12:44
    #38443311
Stalker4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase SA12, 16: Странная ошибка выполнения запроса
Продолжаю разбираться с этой ошибкой.

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

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

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

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

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

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

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

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

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

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


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