oracle 自定义UDT类型,使用嵌套表,创建了存储过程,
C#调用存储过程报错 Custom type mapping for 'dataSource='' typeName='CONTAINER_NAME_TABLE'' is not specified or is invalid”
注:使用的是Oracle.ManagedDataAccess.core,版本号是3.21.50
具体如下:
-- 自定义类型
CREATE OR REPLACE TYPE CONTAINER_NAME_OBJ AS OBJECT (
CONTAINER_NAME VARCHAR2(20)
);
CREATE OR REPLACE TYPE CONTAINER_NAME_TABLE AS TABLE OF CONTAINER_NAME_OBJ;
create procedure Get_Battery_Data(t_container_Name in container_name_table,
Battery_Package_Data_cursor out sys_refcursor) is
begin
OPEN Battery_Package_Data_cursor FOR select* from table (t_container_Name ) c
join b on b.CONTAINER_NAME =c.CONTAINER_NAME;
end Get_Battery_Data;
string [] containerNames = containerNameListToken.ToObject<string[]>();
OracleParameter[] parameters = new OracleParameter[2];
OracleParameter containerNamesParam = new OracleParameter("T_CONTAINER_NAME", OracleDbType.Array);
containerNamesParam.UdtTypeName= "CONTAINER_NAME_TABLE";
containerNamesParam.Value= new[] { "Container1", "Container2" };
parameters[0] = containerNamesParam;
OracleParameter cursorParam = new OracleParameter("Battery_Package_Data_cursor",
OracleDbType.RefCursor, ParameterDirection.Output);
parameters[1] = cursorParam;
OracleDbHelper oracleDbHelper = new OracleDbHelper();
//执行存储过程
DataTable dt = OracleTableByParas(1, "Get_Battery_Data", parameters);