极度困惑Oracle拒绝不提交(oracle一直不提交)

极度困惑:Oracle拒绝不提交

在工作中,我们经常会遇到需要使用 Oracle 数据库的情况。但是有时候会遇到一个令人困惑的问题:Oracle 拒绝不提交。

我曾经遇到这样的情况:我们需要将一个存储过程提交到 Oracle 数据库中,但是每次提交都失败了,提示“ORA-01013:用户请求取消当前操作”的错误信息。我们尝试了很多方法,但是都无济于事。

我们找到了解决方法。我们发现,在提交存储过程之前,我们需要先将自动提交关闭。我们可以使用以下的 SQL 命令来实现:

“`sql

SET AUTOCOMMIT OFF;


这个命令可以关闭自动提交,然后我们就可以提交我们的存储过程了。在提交完成之后,我们需要手动提交一下,使用以下 SQL 命令:

```sql
COMMIT;

这个命令可以手动提交我们所做的操作。

下面是一个完整的例子,包括关闭自动提交、提交存储过程和手动提交:

“`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 AS
BEGIN
-- 创建存储过程
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 脚本中,方便重复使用。


数据运维技术 » 极度困惑Oracle拒绝不提交(oracle一直不提交)