【经验】【ORACLE】存储过程或者函数怎样获取自己的名称和类型

题记:人有时候就好像这存储过程,只有通过和别人交流才能清楚才能知道自己到底是个什么东西!那怕是最最基本的东西你自己都不一定知道。傻B了吧……


----------------调皮的分割线----------------

在Oracle中,存储过程和函数等对象,可通过调用OWA_UTIL包中的who_called_me过程来获得自身的名称和类型。

以下是Oracle联机文档对该过程的说明,该过程将返回调用者的一些信息。

Syntax:

owa_util.who_called_me(
   owner          out      varchar2
   name           out      varchar2
   lineno         out      number
   caller_t       out      varchar2);

Parameters:

owner - the owner of the program unit.

name - the name of the program unit. This is the name of the package, if the calling program unit is wrapped in a package, and the name of the procedure or function if the calling program unit is a stand-alone procedure or function. If the calling program unit is part of an anonymous block, this is NULL.

lineno - the line number within the program unit where the call was made.

caller_t - 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 stand-alone procedures and functions.

Generates

Not applicable.

在网上摘了一个应用的例子:

CREATE OR REPLACE FUNCTION fn_getname
   RETURN VARCHAR2
IS
   l_owner    VARCHAR2 (30);
   l_name     VARCHAR2 (30);
   l_lineno   NUMBER;
   l_type     VARCHAR2 (30);
BEGIN
   OWA_UTIL.who_called_me (l_owner, l_name, l_lineno, l_type);
   RETURN l_owner || '.' || l_name||':'||to_char(l_lineno)||','||l_type;
END;
/


CREATE OR REPLACE PROCEDURE demo
AS
BEGIN
   DBMS_OUTPUT.put_line (fn_getname);
END;
/

call demo();

 

通过该例可以了解该过程的应用。看起来,好像函数对象只能通过who_called_me获得自己调用者的信息,调用者通过调用函数来获取自己的信息……真纠结。

转载于:https://www.cnblogs.com/AzikPhil/archive/2012/06/28/oracle_who_called_me.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle存储过程函数是用PL/SQL语言编写的数据库对象,用于实现复杂的业务逻辑和数据处理。存储过程函数可以在数据库中进行定义和调用,提供了很大的灵活性和可重用性。 存储过程是一组SQL语句和控制结构的集合,可以接受输入参数并返回结果。它们可以用于执行常见的数据库操作,如插入、更新、删除数据,以及执行复杂的业务逻辑。存储过程可以在数据库中进行定义,并通过名称来调用执行。 函数是一个具有输入参数和返回值的可执行代码块。它们可以用于计算和返回单个值,例如数学运算、字符串处理或日期操作。函数可以在SQL查询中使用,并且可以像内置函数一样进行调用。 下面是一个示例存储过程的代码: ```sql CREATE OR REPLACE PROCEDURE get_employee_details (p_employee_id IN NUMBER, p_details OUT SYS_REFCURSOR) AS BEGIN OPEN p_details FOR SELECT * FROM employees WHERE employee_id = p_employee_id; END; ``` 上面的存储过程接受一个员工ID作为输入参数,并通过游标将该员工的详细信息返回给调用者。 下面是一个示例函数的代码: ```sql CREATE OR REPLACE FUNCTION calculate_salary_bonus (p_employee_id IN NUMBER, p_bonus_percentage IN NUMBER) RETURN NUMBER AS v_salary NUMBER; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = p_employee_id; RETURN v_salary * p_bonus_percentage / 100; END; ``` 上面的函数接受一个员工ID和奖金百分比作为输入参数,并返回计算后的奖金金额。 存储过程函数可以通过CREATE PROCEDURE和CREATE FUNCTION语句在Oracle数据库中进行定义。一旦定义好,它们可以通过名称进行调用,可以在其他存储过程函数或SQL查询中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值