powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle 12 - бага или фича?
14 сообщений из 14, страница 1 из 1
Oracle 12 - бага или фича?
    #39495085
Ivanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
После перехода с 11-й на 12-ю версию Oracle, обнаружили потерю части функциональности.
А именно:
В системе работает такой SQL-запрос, выполнение которого происходит динамически ( DBMS_SQL ):
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT
  CASE
    WHEN EXISTS (SELECT * FROM TABLE (GET_TAB_PTF (5)))
    THEN 1 ELSE 0
  END
FROM DUAL


GET_TAB_PTF - обычная PIPELINED-функция, кторая возвращает таблицу из 2-х полей и 5-ти строк.

При выполнении его пользователем из любого клиента-обертки (TOAD), все проходит нормально (все через динамисеский SQL). Но когда его выполнение инициируется процессом на Шедулере (JOB), он разваливается по следующей ошибке:
Код: plsql
1.
2.
ORA-01002: выборка из последовательности
ORA-01002: fetch out of sequence



Путем экспериментов и методом исключения установили, что причиной всего является конструкция EXISTS, если ее видоизменить к примеру с использованием COUNT, то ошибка исчезает:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT
  CASE
    WHEN (SELECT COUNT (*) FROM TABLE (GET_TAB_PTF (5))) > 1
    THEN 1 ELSE 0
  END
FROM DUAL



Причем, EXISTS "ломается" только если внутри него подзапрос с PIPELINED-функцией. Если внутри него будет обычный запрос, также все отработает корректно:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT
  CASE
    WHEN EXISTS (SELECT dummy FROM DUAL UNION ALL SELECT dummy FROM DUAL)
    THEN 1 ELSE 0
  END
FROM DUAL



На 11-й версии этого феномена не было.

Подскажите кто сталкивался или кто знает, с чем это связано.
Это штатное поведение 12-го Оракла, или ошибка?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495088
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanco,

попробуйте так:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT
  CASE
    WHEN EXISTS (SELECT 1 FROM TABLE (GET_TAB_PTF (5)))
    THEN 1 ELSE 0
  END
FROM DUAL
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495101
Ivanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLIvanco,

попробуйте так:


Нет, результат тот же,
Код: plsql
1.
ORA-01002: выборка из последовательности
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495114
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanco
Код: plsql
1.
GET_TAB_PTF

AUTHID?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495718
Ivanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicAUTHID?
Я так понимаю, речь про директиву "AUTHID CURRENT_USER"?
Все используемые таблицы и объекты находятся в той же схеме, откуда происходит обращение к ним.
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495724
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanco,

Явные коммиты/ролбаки в функции есть?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495727
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivancoобычная PIPELINED-функция

Или необычная? С автономкой внутрях?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495813
Ivanco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envЯвные коммиты/ролбаки в функции есть?
envИли необычная? С автономкой внутрях?
Внутри ничего необычного нет, для упрощения функцию беру из учебного примера:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
DROP TYPE t_tf_tab;
/

DROP TYPE t_tf_row;
/

CREATE TYPE t_tf_row AS OBJECT (
  id           NUMBER,
  description  VARCHAR2(50)
);
/

CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;
/

CREATE OR REPLACE FUNCTION get_tab_ptf (p_rows IN NUMBER) RETURN t_tf_tab PIPELINED AS
BEGIN
  FOR i IN 1 .. p_rows LOOP
    PIPE ROW(t_tf_row(i, 'Description for ' || i));   
  END LOOP;

  RETURN;
END;
/
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39495982
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanco,

Продемонстрируй на этом тестовом примере на обеих версиях.
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39496081
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envIvanco,

Продемонстрируй на этом тестовом примере на обеих версиях.

на "апексе" ошибка не воспроизводится

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0
PL/SQL Release 12.1.0.2.0 - Production 0
CORE 12.1.0.2.0 Production 0
TNS for Linux: Version 12.1.0.2.0 - Production 0
NLSRTL Version 12.1.0.2.0 - Production

.....
stax
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39496197
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас, ты именно ситуацию ТС воспроизвёл?
С динамикой и вызовом через скедулер? Или просто через морду к базе?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39496213
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envСтас, ты именно ситуацию ТС воспроизвёл?
С динамикой и вызовом через скедулер? Или просто через морду к базе?

нет, был невнимательным, опустил о джобе

.....
stax
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39496955
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvancoElicAUTHID?
Я так понимаю, речь про директиву "AUTHID CURRENT_USER"?
Все используемые таблицы и объекты находятся в той же схеме, откуда происходит обращение к ним.и зачем тогда authid cu?
...
Рейтинг: 0 / 0
Oracle 12 - бага или фича?
    #39497082
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ТОАД обычный запрос, а в шедулере pl-sql?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle 12 - бага или фича?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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