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

Oracle数据库中dml提交,奇怪,ORACLE的触发器的DML操作,没有COMMIT,居然也能真正的提交掉???...

SQLselect*fromdept;DEPTNODNAMELOC-------------------------------------10ACCOUNTINGNEWYORK

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

写如下触发器,是为了使DEPT表的DEPTNO列发生变化的时候,EMP表的相关的行的对应的列也做相应修改,用这个来增强参照完整性的约束

SQL> create or replace trigger cascade_update

2  after update on delete on dept

3  for each row

4  begin

5  update emp

6  set emp.deptno= :new.deptno

7  where emp.deptno=

5b24fae4cde99750994428c024162093.gifld.deptno;

8  end;

9  /

after update on delete on dept

*

ERROR 位于第 2 行:

ORA-00903: 表名无效

SQL> l 2

2* after update on delete on dept

SQL> c /update on/update or

2* after update or delete on dept

SQL> /

触发器已创建

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

看看原先EMP表有DEPTNO=10的列

SQL> select * from emp where deptno=10;

EMPNO ENAME      JOB              MGR HIREDATE          SAL       CO

---------- ---------- --------- ---------- ---------- ---------- --------

DEPTNO

----------

7782 CLARK      MANAGER         7839 09-6月 -81       2450

10

7839 KING       PRESIDENT            17-11月-81       5000

10

7934 MILLER     CLERK           7782 23-1月 -82       1300

10

SQL> update dept set deptno=1 where deptno=10;

已更新 1 行。

然后验证一下情况

发现原先有DEPTNO=10的列不见了

SQL> select * from emp where deptno=10;

未选定行

变成等于1的列了

SQL> select * from emp where deptno=1;

EMPNO ENAME      JOB              MGR HIREDATE          SAL       CO

---------- ---------- --------- ---------- ---------- ---------- --------

DEPTNO

----------

7782 CLARK      MANAGER         7839 09-6月 -81       2450

1

7839 KING       PRESIDENT            17-11月-81       5000

1

7934 MILLER     CLERK           7782 23-1月 -82       1300

1

提交一下

SQL> commit;

提交完成。

SQL> select * from emp where deptno=1;

EMPNO ENAME      JOB              MGR HIREDATE          SAL       CO

---------- ---------- --------- ---------- ---------- ---------- --------

DEPTNO

----------

7782 CLARK      MANAGER         7839 09-6月 -81       2450

1

7839 KING       PRESIDENT            17-11月-81       5000

1

7934 MILLER     CLERK           7782 23-1月 -82       1300

1

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

1 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

SQL>

然后开另外一个回话窗口,按道理来说EMP表的改变是在触发器中实现的,触发器中又没有COMMIT语句,另一个窗口应该看不到EMP表的改变吧,但是事实是可以看到啊,说明被提交了啊。是否是DEPT提交后EMP也会被提交呢

连接到:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

1 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

SQL> select * from emp where deptno=10;

未选定行

SQL> select * from emp where deptno=1;

EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM

---------- ---------- --------- ---------- ---------- ---------- ----------

DEPTNO

----------

7782 CLARK      MANAGER         7839 09-6月 -81       2450

1

7839 KING       PRESIDENT            17-11月-81       5000

1

7934 MILLER     CLERK           7782 23-1月 -82       1300

1

SQL>



推荐阅读
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • vue使用
    关键词: ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
手机用户2502907815
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有