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

时间:2012-12-29 10:14:13

标签: c# asp.net oracle ado.net plsql

我的代码:

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开发人员中使用这个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;"
};

2 个答案:

答案 0 :(得分:0)

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

我个人有一个用空格替换新行的方法,所以我可以存储格式化的命令,但是我会把它弄平并且#34;将它们放入OracleCommand之前。

答案 1 :(得分:0)

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

:param_id = P_ID;

它应该是:

:param_id := P_ID;

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