Oracle“PL / SQL TABLE”类型为OracleDbType类型

时间:2014-09-26 08:54:37

标签: sql oracle plsql oracle-sqldeveloper

我有这个包裹:

create or replace PACKAGE pkg_stud_clm_data IS
TYPE t_test_clm_data_rec IS RECORD
(
            p_studentID     SYSTEM.STUDENT.student_id%TYPE,
            p_LastName      SYSTEM.STUDENT.last_name%tYPE,
            p_ModifiedDate  SYSTEM.STUDENT.modified_date%TYPE,
            p_ModifiedBy    SYSTEM.STUDENT.modified_by%TYPE,
            p_RegDate       SYSTEM.STUDENT.registration_date%TYPE,
            p_CreatedDate   SYSTEM.STUDENT.created_date%TYPE,
            p_CreatedBy     SYSTEM.STUDENT.created_by%TYPE,
      p_Zip           SYSTEM.student.zip%TYPE
);
TYPE t_test_clm_data_ref IS REF CURSOR
    RETURN t_test_clm_data_rec;
TYPE t_test_clm_data_tab IS TABLE OF t_test_clm_data_rec
    INDEX BY BINARY_INTEGER;

PROCEDURE PROC_INS_STUDENT(io_table IN OUT t_test_clm_data_tab);
END pkg_stud_clm_data;

我在里面使用这个包体:

create or replace PACKAGE BODY pkg_stud_clm_data IS
PROCEDURE PROC_INS_STUDENT 
(
    io_table IN OUT t_test_clm_data_tab
)
IS 
BEGIN
  FOR idx IN io_table.FIRST .. io_table.LAST LOOP
    INSERT INTO SYSTEM.STUDENT(
      STUDENT_ID,
            LAST_NAME,
            MODIFIED_DATE,
            MODIFIED_BY,
            REGISTRATION_DATE,
            CREATED_DATE,
            CREATED_BY,
      ZIP
      )
      VALUES
        (
            io_table(idx).p_studentID,
            io_table(idx).p_LastName,
            io_table(idx).p_ModifiedDate,
            io_table(idx).p_ModifiedBy,
            io_table(idx).p_RegDate,
            io_table(idx).p_CreatedDate,
            io_table(idx).p_CreatedBy,
      io_table(idx).p_Zip
        ); 
    END LOOP;
END PROC_INS_STUDENT;
END pkg_stud_clm_data;

问题是,当我试图从.Net调用它并为 io_table 创建输入参数时,其Data_Type为“PL / SQL TABLE”我无法弄清楚OracleDbType类型使用。

创建IN OUT参数

我尝试过使用:

OracleDbType.RefCursor,
OracleDbType.Object,
OracleDbType.Array

但我不断收到如下错误: 数组= Invalid parameter binding Parameter name: "IO_TABLE" 对象= Invalid parameter binding Parameter name: "IO_TABLE"

对于我相信我应该使用的RefCursor,我得到:

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PROC_INS_STUDENT'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1 个答案:

答案 0 :(得分:0)

我怀疑你可以从.NET绑定PL / SQL变量;您需要使用创建为

的SQL类型数组
CREATE OR REPLACE TYPE my_array AS TABLE OF NUMBER;

能够从PL / SQL外部传递它。

Alternativly编写PL / SQL函数(如Add_element),将值逐个添加到全局PL / SQL数组中。你可以在.Net循环中调用它们。然后是读取预先填充的全局PL / SQL数组的过程。