0

我的代码:

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;"
};
4

2 回答 2

0

OracleCommand无法处理多行的存储过程。你必须改变你CommandText的排成一行。(只需删除所有新行)。

我个人有一种用空格替换新行的方法,因此我可以存储格式化的命令,但在将它们放入OracleCommand.

于 2012-12-29T10:32:42.540 回答
0

这可能只是一个小错误。代替:

:param_id = P_ID;

它应该是:

:param_id := P_ID;

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

于 2012-12-30T12:27:07.280 回答