PLSQL Language Referenc-PL/SQL静态SQL-自治事务-从SQL调用自治函数

SQL调用自治函数

SQL语句调用的函数必须遵守意在控制副作用的规则。为了检测对规则的违背,要使用RESTRICT_REFERENCES编译指示。该编译指示警告函数没有读写数据库表或包变量。

根据定义,自治程序永远不会违背read no database stateRNDS)和write no database stateWNDS

DROP TABLE debug_output;

CREATE TABLE debug_output (message VARCHAR2(200));

 

CREATE OR REPLACE PACKAGE debugging AS

    FUNCTION log_msg (msg VARCHAR2) RETURN VARCHAR2;

    PRAGMA RESTRICT_REFERENCES(log_msg, WNDS, RNDS); --编译指令

END debugging;

/

CREATE OR REPLACE PACKAGE BODY debugging AS

    FUNCTION log_msg (msg VARCHAR2) RETURN VARCHAR2 IS

        PRAGMA AUTONOMOUS_TRANSACTION; --自治函数

    BEGIN

   

    --插入不会违背WNDS规则,因为这是一个自治程序

    INSERT INTO debug_output (message) VALUES (msg);

 

    COMMIT;

    RETURN msg;

    END;

END debugging;

/

--从查询调用包函数

DECLARE

    my_emp_id    NUMBER(6);

    my_last_name VARCHAR2(25);

    my_count     NUMBER;

BEGIN

    my_emp_id := 120;

 

    SELECT debugging.log_msg(last_name)

    INTO my_last_name

    FROM employees

    WHERE employee_id = my_emp_id;

    dbms_output.put_line(my_last_name);

    --即使执行了回滚操作,但插入到debug_output中的信息仍然存在

    --因为它是自治事务的一部分

    ROLLBACK;

END;

/

SELECT * FROM debug_output;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1123726/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1123726/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值