极度困惑Oracle拒绝不提交(oracle一直不提交)
极度困惑:Oracle拒绝不提交
在工作中,我们经常会遇到需要使用 Oracle 数据库的情况。但是有时候会遇到一个令人困惑的问题:Oracle 拒绝不提交。
我曾经遇到这样的情况:我们需要将一个存储过程提交到 Oracle 数据库中,但是每次提交都失败了,提示“ORA-01013:用户请求取消当前操作”的错误信息。我们尝试了很多方法,但是都无济于事。
我们找到了解决方法。我们发现,在提交存储过程之前,我们需要先将自动提交关闭。我们可以使用以下的 SQL 命令来实现:
“`sql
SET AUTOCOMMIT OFF;
这个命令可以关闭自动提交,然后我们就可以提交我们的存储过程了。在提交完成之后,我们需要手动提交一下,使用以下 SQL 命令:
```sqlCOMMIT;
这个命令可以手动提交我们所做的操作。
下面是一个完整的例子,包括关闭自动提交、提交存储过程和手动提交:
“`sql
— 关闭自动提交
SET AUTOCOMMIT OFF;
— 创建存储过程
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Hello World!’);
END;
— 手动提交
COMMIT;
我们还可以将这个过程封装到一个 PL/SQL 脚本中,方便重复使用:
```sql-- 创建脚本
SET SERVEROUTPUT ON;SET AUTOCOMMIT OFF;
CREATE OR REPLACE PROCEDURE create_my_proc ASBEGIN
-- 创建存储过程 EXECUTE IMMEDIATE 'CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN DBMS_OUTPUT.PUT_LINE(''Hello World!'');
END;'; -- 手动提交
COMMIT; DBMS_OUTPUT.PUT_LINE('Stored procedure created.');
END;-- 执行脚本
EXECUTE create_my_proc;
在这个例子中,我们定义了一个名为 `create_my_proc` 的存储过程,它会自动创建一个名为 `my_proc` 的存储过程,并将其提交到数据库中。
Oracle 拒绝不提交的问题可能是因为自动提交被打开了,我们需要关闭自动提交才能成功提交我们的操作。同时,我们还可以将操作封装到一个 PL/SQL 脚本中,方便重复使用。