在PL \ SQL块中使用EXECUTE IMMEDIATE

Omer K

在PL \ SQL块中使用EXECUTE IMMEDIATE可使整个块立即提交。

begin 

INSERT INTO Customer ( GUID, STATUS, NAME) VALUES (1,1,'xx');

EXECUTE IMMEDIATE 'CREATE TABLE Shop
(
  GUID         NUMBER(16),
  STATUS       NUMBER(1),
  NAME         VARCHAR2(50 BYTE),
)
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING';

DBMS_OUTPUT.PUT_LINE('DONE:'); 

EXCEPTION  -- exception handlers begin 
  WHEN OTHERS THEN  -- handles all other errors 
  DBMS_OUTPUT.PUT_LINE('Error occured, rollback...'); 

 ROLLBACK;
end; 

如您所知,我什至不使用COMMIT。关于上面的代码,

“插入到”语句有效,但是“创建表”语句引发异常,因为数据库中已经存在一个具有相同名称的表。

当我查看数据库时,我都没有任何commit语句,并且代码块掉落并回滚,当我看到插入已起作用并且有新行时,回退了。预计它不应该在那里,因为没有提交并且回滚也有效。

发生异常时如何进行回滚。

Ankit bajpai

您可以输入以下PL / SQL代码:

begin 

EXECUTE IMMEDIATE 'CREATE TABLE Shop
(
     GUID         NUMBER(16),
     STATUS       NUMBER(1),
     NAME         VARCHAR2(50 BYTE),
)
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING';
DBMS_OUTPUT.PUT_LINE('DONE:'); 

INSERT INTO Customer ( GUID, STATUS, NAME) VALUES (1,1,'xx');

EXCEPTION  -- exception handlers begin 
    WHEN OTHERS THEN  -- handles all other errors 
    DBMS_OUTPUT.PUT_LINE('Error occured, rollback...'); 

ROLLBACK;
end; 

因此,首先它将创建表,如果发生异常,它将回滚事务,并且insert语句将不起作用。希望这对您有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在PL / SQL匿名块中使用替换字符串

来自分类Dev

PL / SQL在LOOPING中使用获取数据

来自分类Dev

在PL \ SQL块中使用EXECUTE IMMEDIATE

来自分类Dev

通过EXECUTE IMMEDIATE从select语句返回值

来自分类Dev

LOOP内的PL / SQL EXECUTE IMMEDIATE(过程以截断模式中的所有表)

来自分类Dev

在pl / sql中使用双竖线

来自分类Dev

executeSqlScript因Spring for PL / SQL块而失败

来自分类Dev

PL / SQL层次排序

来自分类Dev

EXECUTE IMMEDIATE PL / SQL块返回类型

来自分类Dev

在MySQL匿名PL / SQL块

来自分类Dev

使用PL / SQL块创建触发器时出错

来自分类Dev

如何在其他pl / sql块中使用Oracle db中的信息输出?

来自分类Dev

在Unix脚本中调用PL / SQL块

来自分类Dev

在PL / SQL匿名块中使用替换字符串

来自分类Dev

PL / SQL实现while循环PL:00103

来自分类Dev

在pl / sql块中声明变量

来自分类Dev

在pl / sql中使用子查询块

来自分类Dev

从pl / sql块返回数据行

来自分类Dev

pl / sql偶数和奇数和块

来自分类Dev

在pl / sql中使用双竖线

来自分类Dev

在PL-SQL块中声明并使用PROCEDURE

来自分类Dev

如何使用pl sql块对表中的数据进行排序

来自分类Dev

如何在此代码中正确使用oracle EXECUTE IMMEDIATE

来自分类Dev

使用外部联接的PL / SQL

来自分类Dev

PL SQL动态SQL

来自分类Dev

我可以在PL / SQL块中使用REGEXP_LIKE作为IF的条件吗

来自分类Dev

Oracle - 为什么在存储过程中允许 EXECUTE IMMEDIATE?

来自分类Dev

PL/SQL 中的“被使用”查询?

来自分类Dev

从 EXECUTE IMMEDIATE PLSQL 输出结果