I have two User Defined Types in my schema:
create or replace
TYPE CITIZEN
AS
OBJECT
(
PIN VARCHAR2(7 CHAR),
LNAME VARCHAR2(30 CHAR) ,
FNAME VARCHAR2(30 CHAR),
.....)
create or replace
TYPE INW_DOC
AS
OBJECT
(
CITIZEN DOKCENTRA.CITIZEN,
SUBJECTID NUMBER(2,0),
CONCERNED_FIELD NUMBER(1,0),
APPTYPE NUMBER(2,0),
REMARKS VARCHAR2(1000 CHAR),
......)
I've generated the corresponding classes using ODP.NET Visual Studio tool. With below code I try to execute a stored procedure that takes one input parameter of type INW_DOC
:
OracleConnection con= new OracleConnection(connectionString);
OracleCommand cmd=con.CreateCommand();
cmd.CommandText="PKG$DOCS.SAVE_DOC";
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter param = new OracleParameter();
param.ParameterName = "V_INW_DOC";
param.UdtTypeName = "MySchema.INW_DOC";
param.OracleDbType = OracleDbType.Object;
param.Value = GetNewInwDoc();
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
I get ArgumentException "Invalid parameter binding" exception. I don't have much to check other than the correctness of the parameter name and parameter type. I'm afraid of having wasted tons of time before realizing that it's just ODP.NET not supporting UDT field inside another UDT. Any ideas?
While I can't state the real problem, changing the OracleDataAccess.dll version from 2.xxx to 4.xxx solved the problem.