在SQL Developer中进行DML操作后是否需要运行COMMIT
命令?例如,我执行了以下UPDATE
查询:
UPDATE TAB1
SET TBX_TYP='ZX'
WHERE TBX_TYP IN(SELECT TBX_TYP
FROM(
SELECT DISTINCT TBX_TYP
FROM TAB1
ORDER BY 1 )
WHERE ROWNUM=1);
然后当我尝试过滤列时,我发现没有更新任何内容。
答案 0 :(得分:2)
如果您希望更改可用于其他用户/连接,则需要COMMIT
指令,例如:
SESSION1:
SQL> conn hr/hr
Connected.
SQL> truncate table ttt;
Table truncated.
SQL> desc ttt;
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NOT NULL VARCHAR2(20 CHAR)
SQL> insert into ttt values('one');
1 row created.
SQL> select col1 from ttt;
COL1
--------------------
one
因此,当前会话中可以获得新数据。
会话2:
SQL> conn hr/hr
Connected.
SQL> select col1 from ttt;
no rows selected
但是另一个会话无法看到这些数据。所以让我们承诺:
SESSION1:
SQL> commit;
Commit complete.
会话2:
SQL> /
COL1
--------------------
one
现在这个值可用于两个会话。
但是也需要提交将数据存储在数据文件中。
例如,让我们在ttt
表中添加一个新行,但不提交它:
SESSION1:
SQL> insert into ttt values('two');
1 row created.
SQL> select col1 from ttt;
COL1
--------------------
one
two
然后让我们异常关闭数据库并再次启动它
会话2:
SQL> conn / as sysdba
Connected.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2260048 bytes
Variable Size 616563632 bytes
Database Buffers 444596224 bytes
Redo Buffers 5517312 bytes
Database mounted.
Database opened.
SQL>
然后重新连接Session1并查看ttt
表:
SQL> conn hr/hr
Connected.
SQL> select col1 from ttt;
COL1
--------------------
one
如您所见,数据库不会在其数据文件中存储未提交的数据。
答案 1 :(得分:0)
在每个DML(更新,删除,插入)命令后添加提交。