传递多个 oracle PL\SQL 块的 C# 得到“遇到符号 /”

Posted

技术标签:

【中文标题】传递多个 oracle PL\\SQL 块的 C# 得到“遇到符号 /”【英文标题】:C# passing multiple oracle PL\SQL blocks gets "Encountered the symbol / "传递多个 oracle PL\SQL 块的 C# 得到“遇到符号 /” 【发布时间】:2014-04-08 10:21:35 【问题描述】:

我正在尝试向 oracle 传递一个 PL\SQL 脚本,该脚本由多个块(开始/结束)组成。 以下示例代码适用于 SqlDev,但不适用于 C#。

BEGIN 
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE()) || ' Block1');
END;
/

BEGIN
   DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE()) || ' Block2');
END;

C#代码:

var str = @"
begin 
    DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE()) || ' Block1'); 
end;
/
begin 
    DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE()) || ' Block2');
end;
";
str = str.Replace(Environment.NewLine, "\n");
ExecuteNonQueryThis(str2)

我得到的错误:

ORA-06550: line 5, column 1: PLS-00103: Encountered the symbol "/" 

甚至可以通过 C# 执行 Oracle 的多块脚本吗?

【问题讨论】:

过程是对的,去掉'/'然后执行。 我怀疑你也应该删除str = str.Replace(Environment.NewLine, "\n");这一行。 PL/SQL 对诸如\n 之类的C 风格字符转义序列一无所知。分享和享受。 【参考方案1】:

只需将它包装成一个开始结束

var str = @"
begin

begin 
    DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE()) || ' Block1'); 
end;

begin 
    DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE()) || ' Block2');
end;

end;";

【讨论】:

以上是关于传递多个 oracle PL\SQL 块的 C# 得到“遇到符号 /”的主要内容,如果未能解决你的问题,请参考以下文章

oracle-游标-存储过程-函数-包

oracle pl/sql 基础

如何在 Java 中构造 oracle.sql.ANYDATA 并在 PL/SQL 过程中传递它

在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)

oracle pl/sql 将异常类型传递给函数

Oracle_PL/SQL 动态sql