1. oracle的commit oracle的commit就是提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中 。
执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件 。
锁有很多种,一般我们关注的都是DML操作产生的,比如insert,delete,update,select 。for update都会同时触发表级锁和行级锁
补充:对的,insert以后commit之前是锁表的状态,其他事务无法对该表进行操作 。
2. sql语句中什么时候用commit 最简单的回答你一下 commit是提交的意思(oracle),当你写完一条sql语句后,点击执行,看到数据变化,或者修改,但是在数据中这些数据是没有变化的,如果你要修改数据库中的数据,必须在sql语句会面加一条语句commit 。
数据库中的数据: username pwd admin 123456写一条sqlupdate usertable set pwd='123' where pwd='123456';执行结果 username pwd admin 123456如果这样写update usertable set pwd='123' where pwd='123456'; commit;执行结果 username pwd admin 123 。
3. oracle什么时候需要commit DML语言,比如update,delete,insert等修改表中数据的需要commit;
DDL语言,比如create,drop等改变表结构的,就不需要写commit(因为内部隐藏了commit);
DDL 数据定义语言:
create table 创建表
alter table 修改表
drop table 删除表
truncate table 删除表中所有行
create index 创建索引
drop index 删除索引
当执行DDL语句时,在每一条语句前后,oracle都将提交当前的事务 。如果用户使用insert命令将记录插入到数据库后,执行了一条DDL语句(如create
table),此时来自insert命令的数据将被提交到数据库 。当DDL语句执行完成时,DDL语句会被自动提交,不能回滚 。
DML 数据操作语言:
insert 将记录插入到数据库
update 修改数据库的记录
delete 删除数据库的记录
当执行DML命令如果没有提交,将不会被其他会话看到 。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动
发出commit命令,使未提交的DML命令提交 。
4. Oracle Form中commit的几种使用方法 针对form上面的数据变动进行commit,对于代码复中的类似update,insert语句也进行提交;如果form上面的数据变动和代码中的数据变动有冲突,制最后以界面上的为准 。
2.do_key('commit_form')会首先寻找form下的triggers中的KEY-COMMIT这个trigger,并执行KEY-COMMIT中所写的代码 。如果bai没有KEY-COMMIT这个trigger,则会针对form和代码一起提du交zhi 。
如果form上面的数据变dao动和代码中的数据变动有冲突,最后以界面上的为准 。3.commit对form和数据库进行提交.如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准 。
4.forms_ddl('commit'); 。
5. 引用Oracle Form中如何使用COMMIT ?绻?峤徽?鰂orm用do_key_commit 。
代码:DECLARE l_where varchar2(2000) default '1=1';BEGINfnd_standard.set_who;if :HEADERS.STATUS='NOT APPROVED'THENUPDATE expense_header_all SET status='APPROVED' WHERE HEADER_ID=:HEADERS.HEADER_ID;IF (SQL%NOTFOUND) THENRAISE NO_DATA_FOUND;END IF;forms_ddl('COMMIT');app_query.reset('HEADERS');l_where:= l_where||' and HEADER_ID = ' || :HEADERS.HEADER_ID;app_query.append ('HEADERS',l_where);app_find.find('HEADERS');app_query.reset('HEADERS');END IF;end;关于form中的commit,补充一下:1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交;如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准 。2.do_key('commit_form')会首先寻找form下的triggers中的KEY-COMMIT这个trigger,并执行KEY-COMMIT中所写的代码 。