2017-04-05 32 views
0

我必須創建一個具有2個字段的集合,然後創建一個具有該集合類型的變量作爲參數的過程。 我怎麼能創建2場集合,如果我只有:定義具有某些列的集合PL/SQL

TYPE an_array IS VARRAY(10) OF varchar2(20); 

例如列:ID,名稱; (不知道如何插入它們)。

而在此之後,我要創建程序,

CREATE OR REPLACE PROCEDURE test_proc (p_array an_array) AS 

但是我不得不用我的專欄做一下這個過程。例如,我考慮一個表僱員(id號,name varchar2(20)); 我的程序應該是這樣的:

 CREATE OR REPLACE PROCEDURE test_proc (p_array an_array) AS 
    CURSOR cs IS select * from employees; 
    v_row employees%ROWTYPE; 
    BEGIN 
    OPEN cs; 
    LOOP 
    FETCH cs into v_row ; 
    EXIT WHEN cs%NOTFOUND; 
    IF (mod (v_row.id,2) = 0) then 
     THE ID FIELD FROM MY COLLETION := v_row.id; 
     THE NAME FIELD FROM MY COLLECTION := v_row.name; 
END LOOP; 
CLOSE cs; 
    END; 

`

回答

2

您可以使用記錄的集合。

像這樣

declare 
    type TRec is record(
     col_1 varchar2(20), 
     col_2 number); 

    type TList is table of TRec; 

    t_l TList := TList(); 

    r_l TRec; 

    procedure foo(a_par TList, ai_elem int) is 
    begin 
     if a_par.Exists(ai_elem) then 
     dbms_output.put_line('Value at pos ' || ai_elem || ' is :' || a_par(ai_elem) 
           .col_2); 
     else 
     dbms_output.put_line('There is no element in position :' || ai_elem); 
     end if; 

    end; 

begin 
    r_l.col_1 := 'abc'; 
    r_l.col_2 := 10; 

    t_l.Extend; 
    t_l(t_l.Count) := r_l; 

    foo(t_l, 1); 

    foo(t_l, 3); 

end; 
+0

好吧,但我怎麼會申報程序?我的意思是,我必須在一個匿名塊中聲明我的記錄,那麼如何將它的集合放在它之外? – lexraid

+0

我不明白,爲什麼你「必須在匿名塊中聲明」你需要的類型。能見度範圍如何?如果你在匿名塊中聲明你的類型,那麼你也要在那個塊中聲明你的過程。 – Seyran

+0

是的,沒錯,我只需要在同一個塊中聲明它們,謝謝。 – lexraid

相關問題