`

函数和自治事务pragma autonomous_transaction

阅读更多
基本知识。
        有的时候,希望在select语句中使用自己定义的函数,并且这个函数除了返回特定的值之外,还执行update,insert,delete等操作。

对数据库有写操作(update,insert,delete,crate,alert,commit)的函数是无法简单的用SQL来调用的。

        如何实现?关键是pragma autonomous_transaction 
        如下例子:
       SQL> Create or replace function func_getid return int is
          2   pragma autonomous_transaction;
          3   vid int;
          4  begin
          5     select max(id) into vid from test_id;
          6     update test_id set id=id+1;
          7     commit;
          8     return vid;
          9  end;
         10  /
       
        Function created
       
        SQL> select  func_getid from dual;
       
        FUNC_GETID
        ----------
                 1
       
        SQL> select  func_getid from dual;
       
        FUNC_GETID
        ----------
                 2
分享到:
评论

相关推荐

    Oracle自治事务的介绍(Autonomous_Transactions)

    这种机制使用PRAGMA_AUTONOMOUS_TRANSACTION语句来定义自治事务。自治事务可以是存储过程、函数、本地过程、打包过程、类型方法或顶层匿名块等形式。 自治事务的特点是,它与调用事务无关联,彼此独立。自治事务...

    Oracle中怎样用自治事务保存日志表

    要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。

    Oracle数据完整性嵌套事务调用分析研究

    在上面的示例中,我们使用 PRAGMA AUTONOMOUS_TRANSACTION 语句来声明自治事务,然后调用 Func_GenerateCode 函数来生成单据编号,并将其保存到数据库中。这样即使保存操作失败,自治事务也可以确保数据的一致性。 ...

    oracle自治事务(Trigger)

    在某些情况下,可能需要在触发器内部进行一些操作,而这些操作又不希望受到触发器外部事务的影响,这时候就需要使用到自治事务(Autonomous Transaction)。通过声明`Pragma Autonomous_Transaction;`,可以在触发器...

    oracle触发器调用存储过程

    Oracle自治事务(Autonomous Transaction)机制可以解决这个问题,确保触发器和存储过程之间的事务独立性。 触发器调用存储过程的过程中可能会出现的问题是,insert语句不是自动提交的,因此当insert语句没有提交时...

    oracle开发常用知识

    为了声明一个存储过程或函数为自治事务,需要使用`Pragma Autonomous_Transaction`关键字。此声明意味着该存储过程中执行的操作将是独立的,不受外部事务状态的影响。例如: ```sql CREATE OR REPLACE PROCEDURE ...

    oracle sql项目开发中常见问题总结

    自治事务通过`PRAGMA AUTONOMOUS_TRANSACTION`来声明。在一个自治事务中,即使外部事务回滚,自治事务中的更改也会提交。例如: ```sql FUNCTION Get_SerialNo(i_SerialType NUMBER) RETURN VARCHAR2 IS PRAGMA ...

    oracle之sqlFAQ

    使用 `PRAGMA AUTONOMOUS_TRANSACTION` 可以创建自治事务,确保过程内部的事务不影响外部事务。例如: ```sql FUNCTION Get_SerialNo(i_SerialType NUMBER) RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION; ...

    oracle

    使用`PRAGMA AUTONOMOUS_TRANSACTION`声明一个过程或函数为自治事务。 ### 6. 变量与参数 PL/SQL中变量和参数的使用至关重要,用于存储和传递数据。变量可以通过`VARIABLE_NAME := expression;`进行赋值,参数则在...

    富士通内部培训ORACLE资料

    使用`PRAGMA AUTONOMOUS_TRANSACTION`开启自治事务。 13. **在过程中暂停指定时间**:可以使用`DBMS_LOCK.SLEEP`过程来暂停PL/SQL代码的执行,参数为睡眠的秒数。 14. **计算事务时间和日志量**:事务时间可以通过...

    oracle之常用faq.doc

    12. **设置自治事务**:在PL/SQL中,使用`PRAGMA AUTONOMOUS_TRANSACTION`可以在当前事务内部开启新的事务,确保新事务不受外部事务影响。 13. **暂停指定时间**:使用`DBMS_LOCK.SLEEP`函数,如`DBMS_LOCK.SLEEP(5...

    oracle学习笔记

    通过在存储过程声明`PRAGMA AUTONOMOUS_TRANSACTION`,可以确保事务独立于外部事务进行提交或回滚。 2. 包(Package):包是PL/SQL的高级特性,包括包说明(Specification)和包体(Body)。包说明定义了包的公共...

    oracle chm帮助文件下载

    12. **自治事务**:在PL/SQL块中,可以使用`PRAGMA AUTONOMOUS_TRANSACTION`声明一个自治事务,该事务独立于外部事务,可以在完成后立即提交或回滚。 13. **暂停指定时间**:`DBMS_LOCK.SLEEP`函数可以在PL/SQL中...

Global site tag (gtag.js) - Google Analytics