甲骨文。查询中的参数。变量的名称/编号错误[关闭]

Posted

技术标签:

【中文标题】甲骨文。查询中的参数。变量的名称/编号错误[关闭]【英文标题】:Oracle. Parameters in query. Wrong name/number of the variable [closed] 【发布时间】:2012-12-29 10:14:13 【问题描述】:

我的代码:

oracleCom.CommandText = @"declare P_ID tbl_objects.i_id%TYPE;
                          BEGIN
                            UPDATE tbl_objects
                            SET i_status_id = 234
                            WHERE s_code = '" + objectsChanged[j] + 
                            @"' RETURNING i_id INTO P_ID;
                                :param_id := P_ID;
                          END;";
oracleCom.Parameters.Add("param_id", OracleType.Number).Direction = ParameterDirection.Output;
try

    oracleCom.ExecuteNonQuery();

catch
----------

编译器产生错误: 变量的名称/编号错误。 但是当我在 pl/sql developer 中使用这个 sql 时,一切正常。

此代码工作正常:

OracleCommand oracleCom = new OracleCommand

   Connection = oraConnect,
   CommandText = @"declare P_ID tbl_objects.i_id%TYPE;
                   BEGIN insert into tbl_objects
                                (s_code, i_status_id)
                                values
                                (:s_code, 234)
                      RETURNING I_ID INTO :p_id;
                   END;"
;

【问题讨论】:

如果是编译器错误,而不是运行时错误,这意味着 Java 代码有问题,而不是 PL/SQL 字符串有问题。编译器指出哪一行有错误? 在 PL/DEVELOPER 中可以正常工作 【参考方案1】:

OracleCommand 无法处理多行存储过程。您必须将您的 CommandText 更改为一行。 (只需删除所有新行)。

我个人有一个用空格替换新行的方法,这样我就可以存储我的命令格式化但我在将它们放入OracleCommand之前将它们“展平”。

【讨论】:

我在问题末尾添加的代码可以正常工作【参考方案2】:

这可能只是一个小错误。而不是:

:param_id = P_ID;

应该是:

:param_id := P_ID;

(赋值而不是相等运算符)。

【讨论】:

我更正了这一行。但这对我没有帮助。

以上是关于甲骨文。查询中的参数。变量的名称/编号错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01722: 无效编号 当我尝试执行存储过程时。甲骨文错误

带有绑定参数的大型查询会导致Doctrine中的参数编号错误

传入 Python 列表时的非法变量名称/编号

甲骨文数据阅读器。错误:无效操作。连接已关闭

C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]

ORA-01036;非法变量名称/编号