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 開発者でこの 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

ほんの些細なミスかもしれません。それ以外の:

:param_id = P_ID;

そのはず:

:param_id := P_ID;

(等価演算子の代わりに代入)。

于 2012-12-30T12:27:07.280 に答える
0

OracleCommand複数行のストアド プロシージャを処理できません。CommandText一行になるように変更する必要があります。(すべての新しい行を削除するだけです)。

私は個人的に新しい行をスペースに置き換える方法を持っているので、コマンドをフォーマットして保存できますが、OracleCommand.

于 2012-12-29T10:32:42.540 に答える