pragma autonomous_transaction的用法

合集下载

oracle pragma的用法

oracle pragma的用法

oracle pragma的用法Oracle Pragma的用法什么是Oracle Pragma?Oracle Pragma是一种用于在编译时指示Oracle数据库优化器行为的特殊语句。

它的作用是为了提高查询性能,并且能够为开发人员提供更细粒度的控制。

使用Oracle Pragma的好处•提高查询性能:通过指示优化器执行查询操作的特定方法,可以优化查询性能。

•精确控制:开发人员可以通过使用不同的Oracle Pragma指令来精确控制优化器的行为,以便适应不同的查询需求。

常用的Oracle Pragma指令Pragma AUTONOMOUS_TRANSACTION•描述:在一个事务中调用一个独立的事务。

•示例:PRAGMA AUTONOMOUS_TRANSACTION;BEGIN-- 这里是独立事务的代码END;Pragma INLINE•描述:告诉编译器将指定的函数中的代码“内联”到调用处,以减少函数调用带来的开销。

•示例:CREATE OR REPLACE FUNCTION myfunction (arg NUMBER) RETURN NUMBERASPRAGMA INLINE(myfunction, 'YES');BEGIN-- 函数体END;Pragma EXCEPTION_INIT•描述:为指定的异常定义错误代码。

•示例:DECLAREmy_exception EXCEPTION;PRAGMA EXCEPTION_INIT(my_exception, ;BEGIN-- 引发异常的代码EXCEPTIONWHEN my_exception THEN-- 异常处理代码END;Pragma RESTRICT_REFERENCES•描述:将存储过程或函数的敏感度注释为单元规则,有助于优化器发现运行时的错误。

•示例:CREATE OR REPLACE FUNCTION myfunction (arg NUMBER) RETURN NUMBERRESTRICT_REFERENCES (myfunction, WNPS, RNDS, WNDS, RNPS)AS-- 函数体END;Pragma INLINE_SQL•描述:告诉优化器在执行时使用内联SQL。

PRAGMA AUTONOMOUS_TRANSACTION自治事务

PRAGMA AUTONOMOUS_TRANSACTION自治事务

PRAGMA AUTONOMOUS_TRANSACTION自治事务今天想在函数里面进行update操作,发现这样子的错误会抛以下的DML错误,如下:ORA-14551: cannot perform. a DML operation inside a query - 查询资料发现:对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函数,是无法简单的用SQL来调用的. >>>>>>>>>>>>>>& gt;>>>>>>>>>>>>>>>>>>>>>>>>>>>>& gt;>>>>>>>>>>>>>>>>>>>>>解决办法如下,只需在声明中添加PRAGMA AUTONOMOUS_TRANSACTION Java代码CREATE OR REPLACE FUNCTIONFUN_SET_PROJECT_COST (V_BUDGET_OBJECT_IDIN VARCHAR2,V_ADJUST_ID IN VARCHAR2)RETURN VARCHAR2ISPRAGMA AUTONOMOUS_TRANSACTION;CREATE OR REPLACE FUNCTIONFUN_SET_PROJECT_COST (V_BUDGET_OBJECT_ID IN VARCHAR2,V_ADJUST_ID IN VARCHAR2) RETURN VARCHAR2ISPRAGMA AUTONOMOUS_TRANSACTION;PRAGMA AUTONOMOUS_TRANSACTION自治事务当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback 操作不影响父事务的状态在你的一个事务(外层事务)中可以定义一个或几个自治事务。

数据库transaction用法

数据库transaction用法

数据库transaction用法1. 介绍在数据库管理系统中,transaction(事务)是指一系列数据库操作,要么全部执行,要么全部不执行。

在现代的数据库系统中,transaction是一个非常重要的概念,它确保了数据库操作的一致性、可靠性和持久性。

本文将介绍数据库transaction的基本概念、用法和注意事项。

2. 事务的特性在数据库中,事务具有以下四个特性,通常被缩写为ACID:1)原子性(Atomicity):事务是一个不可分割的工作单位,要么全部执行,要么全部不执行。

2)一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏。

3)隔离性(Isolation):在并发情况下,事务的执行不会受到其他事务的影响。

4)持久性(Durability):一旦事务提交,其结果就会被永久保存在数据库中,即使系统发生故障也不会丢失。

3. 事务的基本操作在数据库系统中,事务具有四个基本操作,通常被缩写为ACID:1)开始事务(BEGIN TRANSACTION):标志着事务的开始。

2)提交事务(COMMIT TRANSACTION):将事务的操作永久保存到数据库中。

3)回滚事务(ROLLBACK TRANSACTION):撤销事务中的所有操作,回复到事务开始之前的状态。

4)保存点(SAVEPOINT):在事务中设置一个保存点,可以在事务回滚时回滚到该保存点。

4. 事务的使用在实际开发中,事务的使用非常普遍,特别是在对数据库进行复杂操作时。

下面是一些常见的事务使用场景:1)转账操作:假设有一个转账操作,需要从一个账户扣除一定金额然后添加到另一个账户。

这个操作必须是原子性的,否则就会出现数据不一致的情况。

2)订单处理:在订单处理中,通常涉及到减库存、生成订单、扣款等操作,这些操作必须是一致的,否则就会出现订单和库存不匹配的情况。

3)数据导入导出:在数据导入导出时,需要保证数据的完整性和一致性,这就需要使用事务来保证操作的一致性。

Oracle ERP Customization-CST COGS CCID 变更

Oracle ERP Customization-CST COGS CCID 变更

Technology DocumentOracle EBS Customization--COGS CCID变更Author: Jack ChangCreation Date: 2015/09/15Last Updated: 2015/09/15Version: 1.0备注:本文档为free resource,仅作为促进技术交流使用;您可对文档的内容进行修改,及更新版本。

Copy Number 1.0文件控管变更记录检阅记录发布记录ContentsTechnology Document (1)1.需求内容 (4)2.解决思路 (4)3.解决步骤 (4)3.1关于PAC 对于销售出库信息科目抓取来源分析 (4)3.2依据表信息,用程序更新为目标组合 (5)3.3问题: (6)1.可能出现的错误 (7)Open/Closed Issues (7)Open Issues (7)Close Issues (7)1.需求内容在Oracle标准功能中,销售成本账户来自于物料属性中值,如下图1;只能够体现为公司段+科目段和产品段;可是,在实际应用中,客户需求COGS账户中要体现出部门段和产品段;例如客户需求为:公司段+科目别+部门段+产品段+保留段其中:公司段和科目段来自于销售订单类型中COGS账户中公司段和科目段部门段来自于销售订单中业务员对应的应收账款账户部门段产品段来自于物料销售成本账户中的产品段这时,就没有部门段能够体现在销售成本信息中;PS:部分需求中,还可能要求依据不同的销售订单类型,体现出不同的科目段;图12.解决思路需要在将销售成本信息生成在成本模块中时,例如PAC 成本;将对应的事务处理类型COGS Recognition 交易分录中,关于销售成本账户的组合ID,按照客户给出的规则进行重新组合和变更更新;在物料事务处理交易关联的分录中,也要按照此规则进行变更;3.解决步骤3.1关于PAC 对于销售出库信息科目抓取来源分析1.PAC 在运行计算时,事务处理交易信息中的账户信息主要来自于两个地方;a)MMT(MTL_MATERIAL_TRANSACTIONS)表中的DISTRIBUTION_ACCOUNT_IDb)COGS 收集信息(即COGS的三只程序)i.COGS收集时,来自于表cst_revenue_cogs_match_lines3.2依据表信息,用程序更新为目标组合此处的程序,只是更新了关于销售出货时COGS对应的科目组合;CREATE OR REPLACE TRIGGER cux_up_cogs_acctidBEFORE insert ON BOM.cst_revenue_cogs_match_linesFOR EACH ROWDECLAREPRAGMA AUTONOMOUS_TRANSACTION;v_acctid number;BEGINbeginselect distinct nvl(cux_get_ccid(gcc1.segment1 || '.' ||gcc1.segment2 || '.' ||gcc2.segment3 || '.' ||gcc3.segment4 || '.' ||gcc3.segment5),:new.cogs_acct_id) cogs_new_ccid into v_acctidfrom oe_order_headers_all oh,oe_order_lines_all ol,mtl_system_items_b msib,oe_transaction_types_all ott,JTF_RS_SALESREPS jrs,gl_code_combinations gcc1,gl_code_combinations gcc2,gl_code_combinations gcc3where oh.header_id = ol.header_idand ol.line_id = :new.cogs_om_line_idand oh.order_type_id = ott.transaction_type_idand ott.cost_of_goods_sold_account = gcc1.code_combination_idand oh.salesrep_id = jrs.salesrep_idand jrs.gl_id_rev = gcc2.code_combination_idand _id = _idand :new.inventory_item_id = msib.inventory_item_idand :anization_id = anization_idand msib.cost_of_sales_account = gcc3.code_combination_id;:new.cogs_acct_id := v_acctid;commit;EXCEPTIONWHEN OTHERS THENROLLBACK;RAISE_APPLICATION_ERROR(-20001,'cogs_om_line_id:' || :NEW.cogs_om_line_id ||sqlerrm,TRUE);end;END cux_up_cogs_acctid;/3.3 问题:在MMT中进行Trigger更新时,发生错误!MMT表中Before Insert Trigger已经存在标准的;所以,此处考虑为使用程序作为更新;希望此文档对大家以后的编程有帮助。

pragma autonomous_transaction的用法 -回复

pragma autonomous_transaction的用法 -回复

pragma autonomous_transaction的用法-回复pragma autonomous_transaction 是SQL 中的一种特殊的事务控制语句。

它用于在当前事务之外创建一个独立的事务,并且不受外部事务的提交或回滚的影响。

pragma autonomous_transaction 提供了一种在当前事务中执行一个独立的任务,并且不会随着外部事务的结果而受到影响的方法。

在本篇文章中,我们将探讨pragma autonomous_transaction 的用法,以及如何正确地使用它来实现自动化的事务处理。

1. 什么是pragma autonomous_transaction?pragma autonomous_transaction 是一个用于创建独立事务的特殊SQL 语句。

每个pragma autonomous_transaction 可以包含多个SQL 语句,这些语句将在一个独立的事务中执行。

与常规的事务不同,pragma autonomous_transaction 不受外部事务的提交或回滚的影响。

这意味着,无论外部事务的结果如何,pragma autonomous_transaction 始终能够独立地完成它的任务。

2. 如何使用pragma autonomous_transaction?要使用pragma autonomous_transaction,首先需要在代码块或存储过程中声明pragma autonomous_transaction。

这可以通过在代码块或存储过程的开头添加pragma autonomous_transaction 的语句来实现。

例如:DECLAREPRAGMA AUTONOMOUS_TRANSACTION;BEGIN需要执行的SQL 语句...COMMIT;END;在上面的示例中,我们声明了一个包含pragmaautonomous_transaction 的代码块,并在其内部执行了一些SQL 语句。

Oracle 存储过程中的事务处理

Oracle 存储过程中的事务处理

Oracle存储过程中的事务处理当在SQL*Plus中进行操作时,用户可以使用COMMIT语句将在事务中的所有操作“保存”到数据库中。

如果用户需要撤销所有的操作,则可以使用ROLLBACK语句回退事务中未提交的操作,使数据库返回到事务处理开始前的状态。

在PL/SQL过程中,不仅可以包括插入和更新这类的DML操作,还可以包括事务处理语句COMMIT和ROLLBACK。

Oracle支持事务的嵌套,即在事务处理中进行事务处理。

在嵌套的事务处理过程中,子事务可以独立于父事务处理进行提交和回滚。

对于过程而言,每个过程就相当于一个子事务,用户可以在自己事务处理的任何地方调用该过程,并且无论父事务是提交还是回滚,用户都可以确保过程中的子事务被执行。

下面通过一个示例演示过程中的事务处理。

(1)以用户SCOTT身份连接到数据库,并建立两个表TEMP和LOG_TABLE。

SQL> create table temp(n number);表已创建。

SQL> create table log_table(2 username varchar2(20),3 message varchar2(4000));表已创建。

(2)建立一个存储过程INSERT_INTO_LOG,用于向表LOG_TABLE添加记录。

SQL> create or replace procedure insert_into_log(msg_param varchar2) is2 pragma autonomous_transaction;3 begin4 insert into log_table(username,message)5 values(user,msg_param);6 commit;7 end insert_into_log;8 /过程已创建。

其中,PRAGMA AUTONOMOUS_TRANSACTION语句表示自动开始一个自治事务,实际上该语句也可以省略。

transaction用法

transaction用法

Transaction用法什么是Transaction?Transaction(事务)是数据库管理系统中的一个重要概念,它指的是一组数据库操作语句的执行单元。

事务提供了一种机制,可以将多个操作看作一个整体,要么全部执行成功,要么全部回滚到初始状态。

在现实世界中,我们常常需要进行一系列相关的操作,并将它们作为一个不可分割的整体进行处理。

例如,在银行转账过程中,我们需要扣除转账账户的金额并增加接收账户的金额,这两个操作必须同时成功或同时失败。

如果其中一个操作失败了,那么整个转账过程都应该被回滚到初始状态。

事务的特性事务具有以下四个特性(通常称为ACID特性):1.原子性(Atomicity):事务是一个不可分割的操作序列,要么全部执行成功,要么全部回滚。

如果在事务执行过程中发生错误或异常,所有已经执行的操作都会被撤销。

2.一致性(Consistency):事务执行前后数据库从一个一致状态变为另一个一致状态。

这意味着在任何时刻都应该满足预定义的完整性约束。

3.隔离性(Isolation):并发执行的多个事务之间应该互相隔离,每个事务都应该感知不到其他事务的存在。

这样可以避免数据不一致和并发访问引起的问题。

4.持久性(Durability):一旦事务提交成功,其对数据库的影响应该是永久性的。

即使系统发生故障,数据也应该能够恢复到提交事务后的状态。

事务的使用场景事务广泛应用于各种数据库管理系统和应用程序中。

以下是一些常见的使用场景:1.银行系统:在银行系统中,转账、存款和取款等操作需要保证原子性和一致性。

如果一个操作失败了,整个交易都会被回滚。

2.航空订票系统:当用户预订机票时,需要同时更新座位信息和用户账户余额。

如果其中一个操作失败了,整个预订过程都会被撤销。

3.电子商务平台:在电子商务平台上下单、支付和库存管理等操作需要通过事务来保证数据的一致性和完整性。

4.在线游戏:在多人在线游戏中,对玩家之间进行交易、竞拍或共享资源等操作也需要使用事务来保证数据的正确性。

SQL注入攻击和防护技术

SQL注入攻击和防护技术

varchar2
authid current_user
is
pragma autonomous_transaction;
begin
execute immediate ''''grant dba to scott''''; commit;
return ''''z''''; end;'';
commit;
sys.lt.findricset(''AA.AA''''||credit.grant_dba)--'',''BBBB''); end;')
•2
Blind SQL Inject
主要通过注入的页面响应来检测是否是需要的结果,甚至可以用时间延迟的方式 来简单判断。
逻辑判断:decode|case 比如我们想得到SYS账户的Password Hash。我们可以获取password hash的每一位 字符来进行比较,正常响应表示字符匹配。 Google上存在大量的Blind SQL Inject工具来提高Bind SQL inject的效率。
•2
通过DNS服务获取信息
select utl_http.request ('http://www.'||(select password from dba_users where rownum=1)||'/' ) from dual; 具体参见后续的数据获取方式
•2
通过ldap_init获取信息
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

pragma autonomous_transaction的用法
在数据库编程中,pragma是一种特殊的指令,用于控制数据库的行为和功能。

其中,autonomous_transaction是一种常用的pragma,它允许在事务中执行自主事务。

这对于需要处理大量数据或需要独立于其他事务执行的操作非常有用。

本文将介绍pragmaautonomous_transaction的用法,包括其定义、语法、示例以及注意事项。

一、定义和背景
pragmaautonomous_transaction用于在数据库中开启自主事务。

自主事务是一种独立于其他事务的事务,可以在没有其他事务干扰的情况下执行一系列操作。

这对于需要处理大量数据或需要独立执行的操作非常有用,因为它可以减少与其他事务的冲突和干扰。

二、语法
这条指令将开启自主事务模式。

如果想要关闭自主事务模式,可以使用以下语法:
三、示例
假设我们有一个简单的数据库,其中包含一个名为“customers”的表,该表包含客户的姓名和电话号码。

现在,我们想要批量更新所有客户的电话号码,而不需要等待其他事务完成。

我们可以使用pragmaautonomous_transaction来实现这个目标。

首先,我们启动一个常规事务:
BEGINTRANSACTION;
接下来,我们执行批量更新操作:
UPDATEcustomersSETphone='new_phone_number'WHEREname='customer_name';
最后,我们提交自主事务:
COMMIT;
这样,我们就可以在自主事务中独立地执行一系列操作,而不会受到其他事务的干扰。

四、注意事项
1.自主事务只能在常规事务之前开启。

如果在常规事务之后开启自主事务,则无法正常工作。

2.自主事务中的操作必须在事务结束时提交或回滚。

如果在自主事务中执行了未提交的操作,可能会导致数据不一致或丢失数据。

3.自主事务中的操作必须与其他事务隔离,以避免与其他事务发生冲突。

因此,在使用自主事务时,需要仔细考虑操作的顺序和依赖关系。

4.开启自主事务可能会增加数据库的开销和复杂性。

因此,在不需要自主事务的情况下,建议关闭该功能以减少资源消耗。

总之,pragmaautonomous_transaction是一种有用的数据库编程工具,它允许在事务中执行自主事务,从而减少与其他事务的冲突和干扰。

在使用该功能时,需要注意其语法、注意事项和用法场景,以确保数据库操作的正确性和一致性。

第 1 页共 1 页。

相关文档
最新文档