繁体   English   中英

将Oracle“ PL / SQL TABLE”类型转换为OracleDbType类型

[英]Oracle “PL/SQL TABLE” type to OracleDbType type

我有这个包裹:

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”时,我无法找出创建该IN OUT参数的OracleDbType类型。

我试过使用:

OracleDbType.RefCursor,
OracleDbType.Object,
OracleDbType.Array

但是我一直收到如下错误: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

我怀疑您是否可以从.NET绑定PL / SQL变量? 您需要使用创建为的SQL类型数组

CREATE OR REPLACE TYPE my_array AS TABLE OF NUMBER;

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

或者编写PL / SQL函数(例如Add_element)以将值一个一地添加到全局PL / SQL数组中。 您可以在.Net循环中调用它们。 然后读取预填充的全局PL / SQL数组的过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM