【发布时间】:2011-06-13 03:27:55
【问题描述】:
我已经写了这个包
CREATE OR REPLACE
PACKAGE CURVES AS
type t_forecast_values is table of test.column2%TYPE index by varchar(20);
assoc_array t_forecast_values;
procedure sp_insert (param1 in varchar2, param2 in number);
END CURVES;
create or replace
package body curves as
procedure sp_insert (param1 in varchar2, param2 in number) as
begin
assoc_array(param1) := param2;
DECLARE primarykey NUMBER(10);
BEGIN
FOR i IN 1..2
LOOP
SELECT seq_curves.nextval INTO primarykey FROM dual;
INSERT INTO TEST (column1, column2, column3)
VALUES (primarykey, param1, assoc_array(param1));
INSERT INTO TEST2 (column1, column2)
VALUES (primarykey, 'default');
END LOOP ;
END;
end sp_insert;
end curves;
我通过这个 c# 代码调用程序:
class Program
{
private static string connString = @"User Id=User; Password=root; Data Source=SOURCE";
private static List<string> forecast_types = new List<string> { "a", "b" };
private static List<double> forecast_values = new List<double> { .1, .2 };
static void Main(string[] args)
{
using (var con = new OracleConnection(connString))
{
string query = "BEGIN curves.sp_insert(:forecast_types, :forecast_values); END;";
try
{
con.Open();
using (OracleCommand cmd = con.CreateCommand())
{
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.BindByName = true;
cmd.Parameters.Add(new OracleParameter
{
ParameterName = ":forecast_types",
OracleDbType = OracleDbType.Varchar2,
Value = forecast_types.ToArray(),
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray
}
);
cmd.Parameters.Add(new OracleParameter
{
ParameterName = ":forecast_values",
OracleDbType = OracleDbType.Double,
Value = forecast_values.ToArray(),
Direction = ParameterDirection.Input,
CollectionType = OracleCollectionType.PLSQLAssociativeArray
}
);
cmd.ExecuteNonQuery();
}
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex);
}
finally
{
con.Close();
}
}
}
}
我收到以下错误:
Oracle.DataAccess.Client.OracleException ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SP_INSERT'
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SP_INSERT'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
at OracleTest.Program.Main(String[] args) in \\comp\user$\Visual Studio 2010\Projects\OracleTest\OracleTest\Program.cs:line 57
我还没有解决问题的想法。任何帮助表示赞赏。
【问题讨论】:
标签: c# oracle stored-procedures plsql associative-array