传递多个 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# 得到“遇到符号 /”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中构造 oracle.sql.ANYDATA 并在 PL/SQL 过程中传递它