【问题标题】:PLSQL Oracle Command does not allow multiple exceptions in the same commandPLSQL Oracle 命令不允许在同一命令中出现多个异常
【发布时间】:2019-05-14 03:36:59
【问题描述】:

我将以下脚本存储在 C# OracleCommand 中。当我执行它时,我得到 ​​p>

“在预期以下之一时遇到符号“/”:“错误。

我正在尝试批量创建大量表,同时检查它们是否首先存在,如果存在则删除。

BEGIN
EXECUTE IMMEDIATE 'DROP TABLE allexact';
EXCEPTION
WHEN OTHERS THEN NULL;
EXECUTE IMMEDIATE '
CREATE TABLE allexact
(
t_long long NULL,
t_binFloat binary_float NULL,
t_binDbl binary_double NULL,
t_rowid rowid NULL,
t_date date NULL,
t_blob BLOB NULL,
t_CLOB CLOB NULL,
t_NCLOB NCLOB NULL
)';
END;//
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE chr_1';
EXCEPTION
WHEN OTHERS THEN NULL;
EXECUTE IMMEDIATE '
CREATE TABLE chr_1
(
chr_1 char(1) NULL,
chr_2 char(2) NULL,
chr_3 char(3) NULL,
chr_4 char(4) NULL,
...
chr_60 char(60) NULL
)';
END;//

此命令在 plsql 开发人员中工作正常,但在 C# 中作为命令执行时不能。如果我在所有代码的底部只有一个异常,它可以正常工作,但是一旦遇到异常,那么(如预期的那样)其余代码将被跳过。如何将多个异常语句放入存储在 C# OracleCommand 变量中的 plsql 命令中?

【问题讨论】:

    标签: c# .net oracle plsql


    【解决方案1】:

    使用OracleCommand,您只能执行 1 个 SQL 语句或 1 个存储过程或 1 个匿名块(您的情况)。但是你通过了 2 个匿名块。因此错误。尝试全部打包成 1 个区块

    begin
       begin 
         EXECUTE IMMEDIATE . . . 
         EXECUTE IMMEDIATE . . . 
       exception when
       end;
    
       begin
         EXECUTE IMMEDIATE . . . 
         EXECUTE IMMEDIATE . . . 
       exception when
       end;
    end;
    

    【讨论】:

    • 真棒......杀死“//”并包装在开始/结束似乎已经成功了。谢谢!
    • @JacobAlley 好问题
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2019-05-12
    • 2020-09-09
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多