多個函式呼叫同一個函式。我需要創建一個標志。假設我在一個 PLSQL 包中有 4 個函式(f1、f2、f3 和 f4)。F1 正在被 F2、F3 和 F4 呼叫。我只想要一個標志來跟蹤哪個函式呼叫了 F1。例如 。如果 f2 呼叫 f1 那么 flag=2,flag=3 當 f3 呼叫 f1 等等,這應該可以通過這樣的方式訪問,我可以在函式 F1 中使用這個標志。
uj5u.com熱心網友回復:
您不需要傳遞任何標志,因為 PL/SQL 可以告訴您呼叫堆疊。
create or replace package demo
as
function f1 return number;
function f2 return number;
function f3 return number;
function f4 return number;
end demo;
create or replace package body demo
as
function f1 return number
is
this_unit varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));
caller varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(2));
begin
dbms_output.put_line(this_unit || ' called from ' || caller);
return 1;
end f1;
function f2 return number
is
this_unit varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));
caller varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(2));
begin
dbms_output.put_line(this_unit || ' called from ' || caller);
return f1 * 2;
end f2;
function f3 return number
is
this_unit varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));
caller varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(2));
begin
dbms_output.put_line(this_unit || ' called from ' || caller);
return f1 f2;
end f3;
function f4 return number
is
this_unit varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));
caller varchar2(257) := utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(2));
begin
dbms_output.put_line(this_unit || ' called from ' || caller);
return f2 * 2;
end f4;
end demo;
測驗:
declare
n number;
begin
n := demo.f3;
end;
/
DEMO.F3 called from __anonymous_block
DEMO.F1 called from DEMO.F3
DEMO.F2 called from DEMO.F3
DEMO.F1 called from DEMO.F2
util_call_stack如果您只需要函式名稱,則可以調整對 的呼叫以排除包名稱。
uj5u.com熱心網友回復:
CREATE FUNCTION f1 (otherParam int,...,flag int) 回傳 int
AS BEGIN -- 在此處輸入命令
回傳標志結束;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385382.html
上一篇:SQL重新排序和選擇列
