Oracle SQL Developer 19.c执行COMMIT命令报错及数据未提交问题
Oracle SQL Developer 19.c COMMIT报错及数据同步问题解决
问题描述
- 在Oracle SQL Developer 19.c的工作表中执行
COMMIT;命令时,程序提示:Unknown Command: COMMIT - 执行的更新语句如下:
update employees_copy A set A.salary = (SELECT B.SALARY FROM EMPLOYEES B WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID) WHERE A.DEPARTMENT_ID = 100;
- SQL Developer内查询显示更新后的正确结果,但SQLPlus命令行查询仍为旧值,退出并重新登录会话后问题依旧
解决办法
1. 检查自动提交设置
SQL Developer默认可能开启自动提交,此时手动执行COMMIT会因事务已自动提交而报错。
- 操作:点击顶部菜单栏「工具」→「首选项」→「数据库」→「工作表」,查看「自动提交」选项是否勾选。
- 若勾选,取消后手动执行
COMMIT;即可正常生效;若需保持自动提交,无需手动执行COMMIT。
2. 确认事务已提交
SQL Developer中看到的正确结果可能是当前未提交事务的本地快照,实际事务并未同步到数据库(比如自动提交未开且未手动提交)。
- 解决:在SQL Developer中执行完更新语句后,确保成功执行
COMMIT;(自动提交未开启时),再去SQLPlus查询数据。
3. 验证数据库连接一致性
排查SQLPlus与SQL Developer是否连接了同一数据库实例(如不同PDB、测试/生产库),导致数据视图不一致。
- 分别在两个工具中执行以下语句,确认数据库和容器匹配:
SELECT NAME, OPEN_MODE FROM V$DATABASE; SELECT SYS_CONTEXT('USERENV','CON_NAME') FROM DUAL;
4. 确认更新语句实际生效
检查更新语句是否真的修改了数据:
- 执行以下语句确认待更新行数和实际匹配行数:
-- 统计DEPARTMENT_ID=100的记录数 SELECT COUNT(*) FROM employees_copy WHERE DEPARTMENT_ID=100; -- 统计可匹配更新的记录数 SELECT COUNT(*) FROM employees_copy A JOIN EMPLOYEES B ON A.EMPLOYEE_ID=B.EMPLOYEE_ID WHERE A.DEPARTMENT_ID=100;
内容的提问来源于stack exchange,提问作者METIN TEKIN
相关产品推荐
相关产品推荐

