ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL静态SQL-自治事务-从SQL调用自治函数

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

原创 Oracle 作者: luisedalian 时间:2014-03-18 07:13:08 0 删除 编辑

从SQL调用自治函数

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

根据定义,自治程序永远不会违背read no database state(RNDS)和write no database state(WNDS)

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博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1123726/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6044090