C# 神谕查询中的参数。变量的名称/编号错误

C# 神谕查询中的参数。变量的名称/编号错误,c#,asp.net,oracle,ado.net,plsql,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 = '" + objec

我的代码:

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/SQLDeveloper中使用这个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;"
};

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


我个人有一种方法,可以用空格替换新行,这样我就可以存储格式化的命令,但在将它们放入
oraclecondromd
之前,我会“展平”它们,这可能只是一个小错误。而不是:

:param_id = P_ID;
应该是:

:param_id := P_ID;

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

我在问题结束时正确添加的代码如果是编译器错误,而不是运行时错误,则意味着Java代码中有错误,而不是PL/SQL字符串中有错误。编译器指出哪一行有错误?在PL/DEVELOPER中,它工作正常。我更正了这一行。但这对我没有帮助。