我们如何首先使用实体框架代码将用户定义的类型或表类型传递给存储过程?
我正在使用:-
下面的代码在数据库上创建对象。
CREATE or replace TYPE PRT_TEST_typ AS OBJECT
( TEST_SER NUMBER(9),
TEST_DESC VARCHAR2(100)
);
下面的代码创建类型表
CREATE or replace TYPE PRT_TEST_tab AS TABLE OF PRT_TEST_typ
以下代码创建表。
CREATE TABLE "PRT_TEST"
( "TEST_SER" NUMBER(9,0),
"TEST_DESC" VARCHAR2(100 BYTE)
) ;
以下代码创建存储过程,以将输入的PRT_TEST_tab参数插入表中。
CREATE or replace PROCEDURE PRC_TEST
( P_PRT_TEST_tab IN PRT_TEST_tab,
P_XX IN VARCHAR2 )
IS
P_RESULT_CODE NUMBER ;
P_RESULT_TEXT VARCHAR2(400);
BEGIN
FOR I IN P_PRT_TEST_tab.FIRST .. P_PRT_TEST_tab.LAST LOOP
INSERT INTO PRT_TEST ( TEST_SER , TEST_DESC )
VALUES ( P_PRT_TEST_tab(I).TEST_SER , P_PRT_TEST_tab(I).TEST_DESC);
END LOOP;
COMMIT;
END;
这是我的尝试
List<Test1> lis = new List<Test1>();
lis.Add(new Test1 { TEST_SER = 123, TEST_DESC = "a1" });
lis.Add(new Test1 { TEST_SER = 456, TEST_DESC = "b2" });
var P1 = new OracleParameter("P1", OracleDbType.RefCursor, lis, ParameterDirection.Input);
var P2 = new OracleParameter("P2", OracleDbType.NVarchar2, p1, ParameterDirection.Input);
var sss = _context.Database.ExecuteSqlCommand(
"BEGIN PRC_TEST(" +
":P1, " +
":P2 " +
"); " +
"END;",
P1,
P2
);