說明:
在撰寫ETL排程工具時,在往日志表裡面寫排程日志時,需要寫入目前執行的使用者名稱、執行作業的名稱等資訊,是以就想到了OWA_UTIL.WHO_CALLED_ME這個過程。
首先,來看一下官網解釋:
OWA_UTIL.WHO_CALLED_ME Procedure
This procedure returns information (in the form of output parameters) about the PL/SQL code unit that invoked it.
這個過程傳回有關調用它的PL/SQL代碼單元的資訊(以輸出參數的形式)。--為照顧英文能力差的朋友
文法:
參數解釋:
Parameter | Description |
---|---|
| The owner of the program unit.--程式單元的所有者。 |
| The name of the program unit. This is the name of the package, if the calling program unit is wrapped in a package, or the name of the procedure or function if the calling program unit is a standalone procedure or function. If the calling program unit is part of an anonymous block, this is .--程式單元的名稱。這是包的名稱(如果調用程式單元包裝在包中),或者是過程或函數的名稱(如果調用程式單元是獨立的過程或函數)。如果調用程式單元是匿名塊的一部分,則該值為NULL。 |
| The line number within the program unit where the call was made.--調用所在程式單元中的行号。 |
| The type of program unit that made the call. The possibilities are: package body, anonymous block, procedure, and function. Procedure and function are only for standalone procedures and functions.--發出調用的程式單元的類型。可能性有:包體、匿名塊、過程和函數。過程和函數僅用于獨立的過程和函數。這一點很重要,如果過程在包裡面,傳回的是包名。 |
案例:
create or replace procedure child_proc(id number) as
owner_name VARCHAR2 (100);
caller_name VARCHAR2 (100);
line_number NUMBER;
caller_type VARCHAR2 (100);
begin
OWA_UTIL.WHO_CALLED_ME (owner_name,caller_name,line_number,caller_type);
DBMS_OUTPUT.put_line ( '【id:】 ' || id
|| ' 【##caller_type:】 ' || caller_type
|| ' 【##owner_name:】 ' || owner_name
|| ' 【##caller_name:】 ' ||caller_name
|| ' 【##line_number:】 ' ||line_number
);
end;
/
create or replace procedure parent_proc as
v_child_proc VARCHAR2(100) := 'begin child_proc (1); end;';
begin
execute immediate v_child_proc;
child_proc (2);
end;
/
下面進行測試:
--記得執行一下輸出,要不然後面不顯示的。
至此完畢,供參考。