2014-01-06 53 views
0

我想通過嵌套表(OracleTable in dotconnection?)作爲參數來調用存儲過程的包。在包中定義了類型 test002_table。存儲過程的代碼如下:如何使用dotconnect for oracle以嵌套表的形式調用存儲過程作爲參數

create or replace package testPro is 
    type test002_table is table of test002%rowtype; 
    procedure testInsert(tbs test002_table); 
end testPro; 

create or replace package body testPro is 
    procedure testInsert(tbs test002_table) is 
     i int; 
    begin 
     delete from test002; 
     for i in 1..tbs.count loop 
      insert into test002 values tbs(i);  
     end loop; 
    end; 
end; 

用PL \ SQL測試運行成功地:

declare 
tab testpro.test002_table := testpro.test002_table(); 
item test002%rowtype; 
i integer; 
begin 
    tab.extend(); 
    item.id:=1; 
    item.name:='a'; 
    item.lev:=5; 
    item.age:=55; 
    item.address:='das'; 
    tab(tab.count) := item; 
    testPro.testInsert(tab); 
    commit; 
end; 

但我不知道如何使用dotConnect調用這個程序。我試過以下方法,但沒有成功:

OracleCommand cmd = new OracleCommand(); 
cmd.Connection = con; //OracleConnection con 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 
OracleType tp = OracleType.GetObjectType("testPro.test002_table", con); 
OracleTable table = new OracleTable(tp); 

Dotconnect找不到該類型。 我如何獲得OracleType所需的對象?或者可以用其他方式解決這個問題?非常感謝。

回答

0

在包中聲明的用戶定義類型不能在此包之外使用。請全局定義與OracleTable類使用的類型:

create or replace type test002_type as object(
    -- list here the test002 columns 
    c1 number, 
    c2 number 
); 
/
create or replace type test002_table is table of test002_type; 
/

JIC:ROWTYPE是PL/SQL結構,並在創建SQL語句類型無法識別。

相關問題