2014-09-26 86 views
0

我有這個套餐:甲骨文「PL/SQL表」類型OracleDbType型

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 

回答

0

我懷疑你可以從.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數組的過程。

+0

看來我一直在我的.Net端做了一些錯誤的事情我發現了一個例子,他們如何從.Net的PL \ SQL表中發送插入記錄到Oracle數據庫的記錄:http://www.oracle .com/technetwork/issue-archive/2007/07-jan/o17odp-093600.html 我只是沒有看到任何能告訴我是否可以一次發送整個表而不是每個coloum的表 – Domitius 2014-09-30 12:23:27