Как узнать наименование вышестоящей операции
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sergei13 Участник
Вступление в Клуб: 06.09.2012
|
Пт Дек 14, 2012 10:29  Как узнать наименование вышестоящей операции |
|
Полезность: Нет оценки
|
Коллеги, может кто знает:
Есть ли в ЦФТ способ узнать, какая вышестоящая операция была запущена?
К примеру, мы запустили операцию DOC_TO_PROV, внутри ее вызывается операция FOLDER_TO_PROV, на сомом нижнем уровне MAKE_PROV.
Нужно из MAKE_PROV идентифицировать, что была запущена операция DOC_TO_PROV |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пт Дек 14, 2012 10:37  Re: Как узнать наименование вышестоящей операции |
|
Полезность: Нет оценки
|
Sergei13 пишет: | Коллеги, может кто знает:
Есть ли в ЦФТ способ узнать, какая вышестоящая операция была запущена?
К примеру, мы запустили операцию DOC_TO_PROV, внутри ее вызывается операция FOLDER_TO_PROV, на сомом нижнем уровне MAKE_PROV.
Нужно из MAKE_PROV идентифицировать, что была запущена операция DOC_TO_PROV |
Безусловно, можно.
Есть такая функция DBMS_UTILITY.FORMAT_CALL_STACK;
PS: Код: |
exception when others then
debug_pipe ('ошибка '||sqlcode||' {'||sqlerrm||'}. Стек: '||dbms_utility.FORMAT_ERROR_BACKTRACE, 0);
raise; |
|
|
 |
Sergei13 Участник
Вступление в Клуб: 06.09.2012
|
Пт Дек 14, 2012 11:44   |
|
Полезность: Нет оценки
|
Спасибо! |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пт Дек 14, 2012 11:50   |
|
Полезность: Нет оценки
|
Для спасибо есть отдельная кнопка "Оценить"  |
|
 |
Blinderbor Участник
Вступление в Клуб: 18.12.2012
|
Пт Янв 18, 2013 08:57   |
|
Полезность: Нет оценки
|
мне то же необходимо понять кто вызывает операцию
для тренировки пробую на своих двух операциях в разных ТБП
в вызываемой операции в ПРОВЕРКА добавил
Код: | begin
debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0);
end; |
в результате я получаю
Код: |
09:52:33 ----- PL/SQL Call Stack -----
object line object
handle number name
30185584 317 package body IBS.Z$SALE_PRINT_OBOROTV_10 --имя вызываемой операции
29AA6F2C 98 package body IBS.Z$U$3244911146 --??
273B30FC 1 anonymous block --?? |
как мне все-таки увидеть имя пакета вызвавшей операции?
трейс будет сохраняться на сервере? (он у меня неудобно расположен в другом городе (( ) |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Янв 21, 2013 12:27   |
|
Полезность: Нет оценки
|
Blinderbor пишет: | мне то же необходимо понять кто вызывает операцию
для тренировки пробую на своих двух операциях в разных ТБП
в вызываемой операции в ПРОВЕРКА добавил
Код: | begin
debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0);
end; |
в результате я получаю
Код: |
09:52:33 ----- PL/SQL Call Stack -----
object line object
handle number name
30185584 317 package body IBS.Z$SALE_PRINT_OBOROTV_10 --имя вызываемой операции
29AA6F2C 98 package body IBS.Z$U$3244911146 --??
273B30FC 1 anonymous block --?? |
как мне все-таки увидеть имя пакета вызвавшей операции?
трейс будет сохраняться на сервере? (он у меня неудобно расположен в другом городе (( ) |
Ну так у тебя всё получилось.
АРМ Навигатор сформировал анонимный блок declare begin end, который выполнил на сервере. Это у тебя есть.
Анонимный блок не включает имя пакета напрямую, а формируется только через интерфейсный пакет операции, в твоём случае Z$U$3244911146.
В интерфейсном пакете уже выполняется подстановка параметров и вызов целевого пакета операции Z$SALE_PRINT_OBOROTV_10
В этом пакете в строке 317 стоит вызов rtl.debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0);
который, собственно, и вывел тебе строчку, которую ты видишь в мониторе канала.
Вот если ты напишешь вывод debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0);
в секции ТЕЛО, и сделаешь вызов этой операции из какой-нибудь другой операции, то имя пакета этой другой тоже будет присутствовать в стэке. |
|
 |
Blinderbor Участник
Вступление в Клуб: 18.12.2012
|
Пн Янв 21, 2013 16:30   |
|
Полезность: Нет оценки
|
пробовал
еще раз переместил debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0); в тело операции
разницы почти нет (
Код: |
object line object
handle number name
1FF4BF94 266 package body IBS.Z$SALE_PRINT_OBOROTV_10
1FF5316C 98 package body IBS.Z$U$3244911146
1FF19F44 1 anonymous block |
|
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Вт Янв 22, 2013 08:03   |
|
Полезность: Нет оценки
|
Blinderbor пишет: | пробовал
еще раз переместил debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0); в тело операции
разницы почти нет (
Код: |
object line object
handle number name
1FF4BF94 266 package body IBS.Z$SALE_PRINT_OBOROTV_10
1FF5316C 98 package body IBS.Z$U$3244911146
1FF19F44 1 anonymous block |
|
Я вот не понимаю, чего ты хочешь добиться-то.
Функционал работает, результат, какой запрашивал, весь получил.
У тебя три вызова, они отражаются в результате.
Строки, в которых эти вызовы стоят, тоже отражаются.
Чего ты ещё хочешь? |
|
 |
Blinderbor Участник
Вступление в Клуб: 18.12.2012
|
Вт Янв 22, 2013 10:55   |
|
Полезность: Нет оценки
|
я из операции PRINT_OBOROT_KSV
вызываю PRINT_OBOROTV_10
Код: |
stdio.put_line_buf('<% PLPCALL [SALE].[PRINT_OBOROTV_10]()%>'); |
в PRINT_OBOROTV_10 у меня
Код: | debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0); |
и в результате хочу видеть PRINT_OBOROT_KSV |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Янв 23, 2013 06:17   |
|
Полезность: 1
|
Blinderbor пишет: | я из операции PRINT_OBOROT_KSV
вызываю PRINT_OBOROTV_10
Код: |
stdio.put_line_buf('<% PLPCALL [SALE].[PRINT_OBOROTV_10]()%>'); |
в PRINT_OBOROTV_10 у меня
Код: | debug_pipe(DBMS_UTILITY.FORMAT_CALL_STACK,0); |
и в результате хочу видеть PRINT_OBOROT_KSV |
А-а, понятно. Извини, ничего не получится. Ты ничего не вызываешь. Ты выводишь в стандартный output Oracle некую строку в ЦФТ-шном формате.
Если АРМ Навигатор не распознаёт свой формат, он просто отобразит результат в виде окошка, типа, глянь, какая кака вылезла.
А если распознает, то просто запускает операцию. Отдельно от той, где ты написал вывод в output.
Вызов - это если ты напишешь
begin ::[SALE].[PRINT_OBOROTV_10]; end;
То есть это заморочка чисто Платформы Развития. А я говорю про Oracle'овский механизм, который про эти ЦФТ-шные заморочки не знает.
Аналогично ничего не получится, если в клиент-скрипте сделать вызов какой-то операции, в которой вывести DBMS_UTILITY.FORMAT_CALL_STACK |
|
 |
Blinderbor Участник
Вступление в Клуб: 18.12.2012
|
Чт Янв 24, 2013 12:52   |
|
Полезность: Нет оценки
|
Цитата: | Извини, ничего не получится |
ну что же, зато разобрались
debug теперь мой единственный помощник |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|