Oracle PL/SQL中取得當前程式名稱

本文介绍了一个在Oracle后端程序中用于获取调用位置存储过程名称的函数,该函数可以在Procedure、Function和Trigger中正确获取调用程序名称,并且支持同服务器不同账号之间的调用。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

在實際應用的Oracle后端程式中,有些模塊可能會經常需要在不同地方調用.

當需要識別調用的位置來作不同區分時,得到當前程式的名稱就很重要了.

 

雖然說我們在寫存儲過程的時候肯定會知道過程名稱,但這樣就只能使用HARDCODE,

為了統一程式書寫規範,減少HARDCODE的使用,我寫了一個函數用來取得調用位置的存儲過程名稱.

 

 

createor replace
function fun_getcallname(pi_user IN varchar2
                        default sys_context('USERENV','CURRENT_USER'))
returnvarchar2
--======================================================================
--
功能說明:返回調用該函數程式的名稱.
--
傳入參數:調用程式所在的帳號名稱,必須為大寫.
--
返回值:調用程式的名稱.
--
注意事項:
--   1.
該函數可以用在Procedure,Function,Trigger,能正確得到調用程式名稱.
--   2.
PACKAGE中使用時,只能得到PACKAGE名稱,不能取得實際的子過程名稱.
--   3.
該函數不支持跨DBLINK的調用.
--   4.
該函數支持同服務器中不同帳號之間的調用.
--
開發人員:VnSoft   開發日期:20090929
--======================================================================
is   
   v_str  varchar2(32767);             
   v_user varchar2(20);
   v_end number;
begin                  
   v_str := DBMS_UTILITY.FORMAT_CALL_STACK;
  v_user := pi_user||'.'; 
 
   v_end :=instrb(v_str,v_user,-1);
  
   v_str :=substrb(v_str,v_end);
  
   v_end :=instrb(v_str,'0x');
   IF v_end=0 THEN
     v_str := substrb(v_str,1,lengthb(v_str) - 1);
  ELSE
      v_str := substrb(v_str,1,v_end- 2);
   END IF;
  
  RETURNsubstrb(v_str,lengthb(v_user)+1);
 
END;

 

這個應該在Oracle 10g以上(含)版本才可以使用.

 


2012/07/20

后來在無意中找到一個Oracle自帶的函數:OWA_UTIL.WHO_CALLED_ME

利用這個函數可以取得當前Procedure的名稱.

先定義一個自定義的函數:

function fun_WHOCALLME
RETURN varchar2
IS 
   v_owner varchar2(100);
   v_name  varchar2(30);
   v_lineno varchar2(30);
   v_call   varchar2(100);
BEGIN
  OWA_UTIL.WHO_CALLED_ME(v_owner,v_name,v_lineno,v_call);
  RETURN v_owner||'.'||v_name;
END;

 然后在其它procedure中調用該函數,就可以知道自己叫什麼名稱了.

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值