.net 4.5 で次のストアド プロシージャを実行しようとしています。
PROCEDURE my_procedure (
a_cursor OUT t_cursor,
return_value OUT VARCHAR2,
a_type VARCHAR2,
a_time DATE,
a_id VARCHAR2,
a_arg1 VARCHAR2,
a_from VARCHAR2,
a_gl2 VARCHAR2,
a_arg2 DATE DEFAULT NULL,
a_templ VARCHAR2 DEFAULT NULL
)
これらの引数のほとんどは null にすることができます。ヒキガエルでは、次のように実行できます。
BEGIN package.my_procedure( :c, :out, 'arg', '', '123' , '', '', '', '', ''); END;
C# では、次のことを試しています。
object[] parameters = {
new OracleParameter("arg1", arg1),
new OracleParameter("arg", "arg"),
new OracleParameter("empti", ""),
new OracleParameter("out", OracleDbType.Varchar2, ParameterDirection.Output),
new OracleParameter("c", OracleDbType.RefCursor, ParameterDirection.Output)
};
const string sql = "BEGIN package.my_procedure
(:c, :out, :arg, :empti, :arg1 , :empti, :empti, :empti, :empti, :empti); END;";
res = _projectRepository.ExecuteStoredProcedure(sql, parameters);
そして、次のエラーが表示されます
Test method Tests.repository.RepositoryTests.TestMethod1 threw exception:
Oracle.DataAccess.Client.OracleException: ORA-06550:
line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'my_procedure'ORA-06550:
line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'my_procedure'ORA-06550:
line 1, column 7:
PL/SQL: Statement ignored
オプションのパラメーターの有無にかかわらず、return_value/:out パラメーターの有無にかかわらず試してみました。
Oracle.DataAccess プロバイダー v. 4.112.3.0 を使用しています。それほど多くのパラメーターを持たない/出力パラメーター (カーソル) が 1 つだけの他のストアド プロシージャで動作します。
編集: エラーが 1 つ見つかりました。パラメーター配列の最初に出力パラメーターが必要です。
new OracleParameter("c", OracleDbType.RefCursor, ParameterDirection.Output),
new OracleParameter("out", OracleDbType.Varchar2, ParameterDirection.Output),
new OracleParameter("arg1", "arg1"),
new OracleParameter("empti", ""),
new OracleParameter("arg", arg),
};
今、私はエラーが発生しています:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
データベースエラーのようですが、エラーが発生することなくヒキガエルから同じコマンドを実行できるため、奇妙に見えます。