热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ORA-14551:无法在查询中执行DML操作的解决方法

--创建测试表createtablefn_dml_test(IDNUMBER(20),textVARCHAR2(200))--创建函数CREATEORREPLACEFUNCTIONfn_test(IDNUMBER)RETURNNUMBERIS/*14551,00000,"cannotperforma...

--创建测试表
create table fn_dml_test
  ID    NUMBER(20),
  text  VARCHAR2(200)
)
 
--创建函数
CREATE OR REPLACE FUNCTION fn_test(ID NUMBER) RETURN NUMBER
IS
/*
14551, 00000, "cannot perform a DML operation inside a query "
// *Cause:  DML operation like insert, update, delete or select-for-update
//          cannot be performed inside a query or under a PDML slave.
// *Action: Ensure that the offending DML operation is not performed or
//          use an autonomous transaction to perform the DML operation within
//          the query or PDML slave.  www.2cto.com  
*/
pragma  AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO fn_dml_test(id,text) values(ID,'success');
  COMMIT;
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
  INSERT INTO fn_dml_test(id,text) values(ID,'fail');
  COMMIT;
  RETURN 0;
END;
 
--查询验证
SELECT fn_test(1) from dual
 
 
 
摘自 gdolphinw的专栏

推荐阅读
author-avatar
CY雪HLGC
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有