|
|
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Уважаемые Дамы и господа! Помогите в разрешении следующей проблемы- Имеем 3 процедурочки пр1 ,пр2 и пр3. пр1 вызывается из пр2 и из пр3. Как можно в процедуре пр2 определить имя вызвавшей процедуры? То есть был ли этот вызов из пр2 или из пр3? Заранее всем большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 11:00 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Передавай параметром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 11:40 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Я пробовал воспользоваться следующей процедурой но у меня ничего не вышло. И еще кстати Oracle позволяет сохранить дерево вызовов процедур... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2003, 04:46 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Отлично работает create or replace procedure test1 is begin test2; end test1; create or replace procedure test2 is a varchar2(100); b varchar2(100); c number; d varchar2(100); begin owa_util.who_called_me(a,b,c,d); dbms_output.put_line(a||' '||b||' '||c||' '||d); end test2; begin test1; end; Output: UCHZATR TEST1 3 PROCEDURE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2003, 09:04 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
А у меня вот такая ошибка вылазит. Код: plaintext 1. 2. 3. 4. Интересно почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2003, 09:57 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Что за оракл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2003, 10:33 |
|
||
|
Как получить имя вызвавшей процедуры?
|
|||
|---|---|---|---|
|
#18+
Попробуй создать процедурку и потестить её. create or replace procedure who_called_new( owner out varchar2, name out varchar2, lineno out number, caller_t out varchar2 ) as call_stack varchar2(4096) default dbms_utility.format_call_stack; n number; found_stack BOOLEAN default FALSE; line varchar2(255); t varchar2(255); cnt number := 0; begin -- loop n := instr( call_stack, chr(10) ); exit when ( cnt = 3 or n is NULL or n = 0 ); -- line := substr( call_stack, 1, n-1 ); call_stack := substr( call_stack, n+1 ); -- if ( NOT found_stack ) then if ( line like '%handle%number%name%' ) then found_stack := TRUE; end if; else cnt := cnt + 1; -- cnt = 1 is ME -- cnt = 2 is MY Caller -- cnt = 3 is Their Caller if ( cnt = 3 ) then -- Fix 718865 --lineno := to_number(substr( line, 13, 6 )); --line := substr( line, 21 ); n := instr(line, ' '); if (n > 0) then t := ltrim(substr(line, n)); n := instr(t, ' '); end if; if (n > 0) then lineno := to_number(substr(t, 1, n - 1)); line := ltrim(substr(t, n)); else lineno := 0; end if; if ( line like 'pr%' ) then n := length( 'procedure ' ); elsif ( line like 'fun%' ) then n := length( 'function ' ); elsif ( line like 'package body%' ) then n := length( 'package body ' ); elsif ( line like 'pack%' ) then n := length( 'package ' ); else n := length( 'anonymous block ' ); end if; caller_t := ltrim(rtrim(upper(substr( line, 1, n-1 )))); line := substr( line, n ); n := instr( line, '.' ); owner := ltrim(rtrim(substr( line, 1, n-1 ))); name := ltrim(rtrim(substr( line, n+1 ))); end if; end if; end loop; end who_called_new; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2003, 13:12 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1992241]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 439ms |

| 0 / 0 |
