Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Забавный баг в pl/sql  [new]
plsql_cursor_bug
Guest
А на какой забавный баг я сегодня нарвался... Понятно, что код с ошибкой, но вляпаться в такое очень просто: достаточно запрос select ... bulk collect into ... переделать в курсор и забыть убрать фразу bulk collect into. Компайлер ошибки не находит.

Кому придет в голову повторить - осторожнее. Пришибить сессию штатными средствами не получится, только убиением треда. Трейсфайл тоже растет бесконечно.

Вот трейс:
Dump file c:\oracle\product\10.2.0\admin\XXXXXX\udump\XXXXXX_ora_1944.trc
Thu Jul 17 15:34:26 2008
ORACLE V10.2.0.3.0 - 64bit Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Windows NT Version V5.2 Service Pack 2
CPU                 : 4 - type 8664, 4 Physical Cores
Process Affinity    : 0x0000000000000000
Memory (Avail/Total): Ph:3753M/7743M, Ph+PgF:7189M/11398M
Instance name: XXXXXX

Redo thread mounted by this instance: 1

Oracle process number: 19

Windows thread id: 1944, image: ORACLE.EXE (SHAD)
 

*** 2008-07-17 15:34:26.785
*** ACTION NAME:() 2008-07-17 15:34:26.739
*** MODULE NAME:(SQL*Plus) 2008-07-17 15:34:26.739
*** SERVICE NAME:(XXXXXX) 2008-07-17 15:34:26.739
*** SESSION ID:(461.1555) 2008-07-17 15:34:26.739
=====================
PARSING IN CURSOR #3 len=58 dep=0 uid=386 oct=47 lid=386 tim=1848987870 hv=3115975184 ad='18491a90'
BEGIN
 dbms_session.session_trace_enable(TRUE, TRUE);
END;
END OF STMT
EXEC #3:c=0,e=12729,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,tim=1848987864
WAIT #3: nam='SQL*Net message to client' ela= 14 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1849027184
WAIT #3: nam='SQL*Net message from client' ela= 13444 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1849061240
=====================
PARSING IN CURSOR #4 len=394 dep=0 uid=386 oct=47 lid=386 tim=1849065936 hv=460494713 ad='181438b0'
DECLARE
  TYPE Dummy_Rec$typ IS RECORD (
    Dummy VARCHAR2 (1)
  );
  TYPE Dummy_List$typ IS TABLE OF Dummy_Rec$typ INDEX BY BINARY_INTEGER;
  v_Dummy Dummy_List$typ;
  CURSOR Dummy_Cur IS
    SELECT Dummy
      BULK COLLECT
      INTO v_Dummy
      FROM Dual
     ORDER BY Dummy;
BEGIN
  OPEN Dummy_Cur;
  FETCH Dummy_Cur
   BULK COLLECT
   INTO v_Dummy
  LIMIT 10;
  CLOSE Dummy_Cur;
END;
END OF STMT
PARSE #4:c=15625,e=4238,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1849065933
BINDS #4:
=====================
PARSING IN CURSOR #3 len=37 dep=1 uid=386 oct=3 lid=386 tim=1849068903 hv=2367533956 ad='254e468'
SELECT DUMMY FROM DUAL ORDER BY DUMMY
END OF STMT
PARSE #3:c=0,e=1211,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1849068900
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
BINDS #3:
...
И вот это BINDS #3: будет повторяться до бесконечности :)
17 июл 08, 16:13    [5949395]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
Хороший 10-ый баг.
На 8i полет нормальный:
Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production
With the Partitioning option
...
      BULK COLLECT
           *
ERROR at line 9:
ORA-06550: line 9, column 12:
PLS-00103: Encountered the symbol "COLLECT" when expecting one of the following:
, from
ORA-06550: line 13, column 1:
PLS-00103: Encountered the symbol "BEGIN"
ORA-06550: line 21, column 0:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin function package pragma procedure form
17 июл 08, 16:23    [5949471]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
Elic
Member

Откуда:
Сообщений: 29976
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

PL/SQL procedure successfully completed.
17 июл 08, 16:47    [5949670]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
fsedg
Guest
Elic
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

PL/SQL procedure successfully completed.

Тело процедуры
begin
NULL;
end;
17 июл 08, 17:03    [5949792]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
plsql_cursor_bug
Guest
Elic
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

PL/SQL procedure successfully completed.

Угу, пофиксили. На 11.1.0.6/32 такой же результат. Хотя куда грамотнее было бы, если бы компилятор ругался.
P.S. Кстати, платформа какая? 32 или 64?
17 июл 08, 17:03    [5949800]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
Elic
Member

Откуда:
Сообщений: 29976
plsql_cursor_bug
P.S. Кстати, платформа какая? 32 или 64?
Информация к размышлению:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
17 июл 08, 17:05    [5949821]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг в pl/sql  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
мммда.. знатная чума (10.2.0.2)
17 июл 08, 18:19    [5950351]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить