powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / get anonymous block source from call stack
8 сообщений из 8, страница 1 из 1
get anonymous block source from call stack
    #39452268
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли способы получить исходный текст anonymous block в call stack ?
Oracle 11,12


----- PL/SQL Call Stack -----
object line object
handle number name
700010405d3c3d8 52 AI.DOCBIU
700010405d3c3d8 133 AI.DOCBIU
70001036a5d6ce8 8641 package body LIF.ACC
7000103ff02ad88 3052 package body LIF.SCR
7000103405f6d58 2 anonymous block --- что тут было?
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39452459
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически ты можешь вытащить этот текст из V$SQL, пока он еще присутствует там
В исторической перспективе -- сильно сомневаюсь
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
tst> connect u1/u1@tst
Connected.
tst> set serveroutput on
tst> exec dbms_output.put_line(dbms_utility.format_call_stack)
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
3e0ef18d0         1  anonymous block


PL/SQL procedure successfully completed.

tst> select sql_text from v$sql where child_address='3e0ef18d0';

no rows selected

tst> select sql_text from v$sql where child_address='00000003e0ef18d0';

no rows selected

tst> select sql_text from v$sql where child_address='00000003E0EF18D0';

SQL_TEXT
-----------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

tst> connect system/manager@tst
Connected.
tst> select sql_text from v$sql where child_address='00000003E0EF18D0';

SQL_TEXT
-----------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

tst> 
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453067
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь,
С первым child_address='3e0ef18d0'; понятно откуда значения
А откуда взялись второй и третий child_address ?


Вячеслав ЛюбомудровТеоретически ты можешь вытащить этот текст из V$SQL, пока он еще присутствует там
В исторической перспективе -- сильно сомневаюсь
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
tst> connect u1/u1@tst
Connected.
tst> set serveroutput on
tst> exec dbms_output.put_line(dbms_utility.format_call_stack)
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
3e0ef18d0         1  anonymous block


PL/SQL procedure successfully completed.

tst> select sql_text from v$sql where child_address='3e0ef18d0';

no rows selected

tst> select sql_text from v$sql where child_address= '00000003e0ef18d0'; <<< ??????????????

no rows selected

tst> select sql_text from v$sql where child_address= '00000003E0EF18D0'; <<< ??????????????

SQL_TEXT
-----------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

tst> connect system/manager@tst
Connected.
tst> select sql_text from v$sql where child_address='00000003E0EF18D0';

SQL_TEXT
-----------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

tst> 
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453087
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima RyА откуда взялись второй и третий child_address ?
Код: plaintext
x86-64
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453097
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicDima RyА откуда взялись второй и третий child_address ?
Код: plaintext
x86-64
Вообще-то это SPARC 64

Смысл в том, что тип у него RAW (4 или 8) и при неявном преобразовании получается RAWTOHEX(CHILD_ADDRESS), поэтому показал, что надо привести к правильному формату

PS. CHILD_ADDRESS=HEXRORAW('3e0ef18d0') тоже не сработало
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453210
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению вывод dbms_utility.format_call_stack OC зависим. На windows:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select dbms_utility.port_string from dual
  2  /

PORT_STRING
----------------------------------------------
IBMPC/WIN_NT64-9.1.0

SQL> set serveroutput on
SQL> exec dbms_output.put_line(dbms_utility.format_call_stack)
----- PL/SQL Call Stack -----
  object      line  object
  handle    number
name
0000000169F83FB8         1  anonymous block


PL/SQL procedure successfully completed.

SQL> 



А вот на Oracle LINUX:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> select dbms_utility.port_string from dual
  2  /

PORT_STRING
--------------------------------------------------------------
x86_64/Linux 2.4.xx

SQL> set serveroutput on
SQL> exec dbms_output.put_line(dbms_utility.format_call_stack)
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x6fd58b60         1  anonymous block


PL/SQL procedure successfully completed.

SQL> 



Так-что в общем случае что-то типа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select sql_text from v$sql where child_address=upper(lpad(replace('0x6fd58b60','x'),16,'0'));

SQL_TEXT
---------------------------------------------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

SQL> 



Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select sql_text from v$sql where child_address=upper(lpad(replace('0000000169F83FB8','x'),16,'0'));

SQL_TEXT
--------------------------------------------------------------------------------------------------------
BEGIN dbms_output.put_line(dbms_utility.format_call_stack); END;

SQL> 



SY.
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453243
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да в общем к любым потрохам нужно относиться достаточно индивидуально
Не удивлюсь, если формат меняется даже от версии

PS. На металинке (а раньше, вроде, у Тома) был как-то как раз разобран вывод именно вывода FORMAT_CALL_STACK в разных версиях/операционках
...
Рейтинг: 0 / 0
get anonymous block source from call stack
    #39453245
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа WHO_CALL_ME
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / get anonymous block source from call stack
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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