Oracle PL SQL 从 SQL Dev 工作。但不是来自代码
Posted
技术标签:
【中文标题】Oracle PL SQL 从 SQL Dev 工作。但不是来自代码【英文标题】:Oracle PL SQL works from SQL Dev. but not from the code 【发布时间】:2012-02-15 12:56:20 【问题描述】:我在这里慢慢发疯了...为什么 SQL Developer 可以使用这种平静的 SQL 代码 而不是来自 C#?
declare x integer;
begin
insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST0', 'DESC0', 61) returning counterid into x;
INSERT ALL
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x)
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x)
SELECT * FROM dual;
end;
在代码中动态生成多个插入。 请帮助...我在这个上花了两天时间,它正在减慢项目的速度。 如果需要,请务必提供更多信息。
谢谢!
编辑:我忘了写下错误:
ORA-06550: line 1, column 19: PLS-00103: Encountered the symbol "" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> form current cursor
【问题讨论】:
如果你说它不适用于 C#,请发布 C# 代码 出于调试目的,我已经硬编码了上面的PLSQL语句......所以我猜代码不相关。 您能向我们展示 C# 代码中的硬编码语句吗?我的意思是:string sqlStr = "declare x integer; begin ..."; 【参考方案1】:好的,我终于解决了问题。
看起来 Oracle 的 odp.net 对换行符(“\r\n”和“\n”)非常敏感,所以请确保 您不要将 @ 用于多行字符串,或者尝试使用 .replace() 方法将“\r\n”替换为“\n”。
最后是这样的:
string anonymousBlock = "declare x integer;" +
"begin " +
"insert into aspa2_counters (shortname, description, devicegroupid) values (:p1, :p2, :p3) returning counterid into x;" +
buildInsert.ToString() +
" end;";
【讨论】:
你先生,真棒!【参考方案2】:这里是硬编码部分:
string query = @"declare x integer;
begin
insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST', 'OPIS', 61) returning counterid into x;
INSERT ALL
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x)
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x)
SELECT * FROM dual;
end;";
和代码Oracle命令代码:
using (OracleCommand cmnd = new OracleCommand(cmndText, con))
if (parameters != null)
foreach (OracleParameter p in parameters)
cmnd.Parameters.Add(p);
try
cmnd.ExecuteNonQuery();
catch (Exception ex)
【讨论】:
以上是关于Oracle PL SQL 从 SQL Dev 工作。但不是来自代码的主要内容,如果未能解决你的问题,请参考以下文章