2017-01-13 81 views
0

關注!在Oracle SQL中是否有執行下面代碼中提供的邏輯的方法?我得到錯誤PLS-00642:SQL語句中不允許使用本地集合類型;變量VAR1和VAR2 ...Oracle PL/SQL本地收集類型不允許錯誤

CREATE OR REPLACE PROCEDURE TEST IS 
    CURSOR c1 IS SELECT * FROM Table1; 
    TYPE num_arr_type IS TABLE OF NUMBER(5); 
    i_rec Table1%ROWTYPE; 
    var1 num_arr_type; 
BEGIN 
    var1:= SELECT num FROM Table3; 
    OPEN c1; 
     LOOP 
     FETCH c1 INTO i_rec; 
     EXIT WHEN c1%NOTFOUND; 

      SELECT a.num     
      FROM Table2 a 
      WHERE a.cod_agt = var1; 

     END LOOP;  
    CLOSE c1; 

END TEST; 

在我的代碼,我想一個SELECT結果存儲到一個變量,而另一個SELECT語句的WHERE子句中使用的變量。那可能嗎?

+1

你有一些問題在這裏。如果你可以發佈一些樣本數據,需要的結果並且描述你想實現的邏輯,那麼人們可以更容易地幫助你。 – Aleksej

+0

可能的重複[編譯錯誤調用過程中的表參數函數](http://stackoverflow.com/questions/41023727/compilation-error-calling-function-with-table-parameter-from-procedure) – Allan

+0

您的編輯是甚至比原來的帖子更令人困惑。這應該怎麼做?這個代碼有什麼問題?這是否會給你發佈的錯誤? – Aleksej

回答

0

我想將SELECT結果存儲到變量中,並在另一個select語句的WHERE子句中使用 變量。那是 可能

我不知道你想實現什麼,但看着你上述聲明我在下面給出一個例子:

CREATE OR REPLACE PROCEDURE TEST IS 
    CURSOR c1 IS 
    SELECT * FROM Table1; 

    TYPE num_arr_type IS TABLE OF NUMBER(5); 

    var1 num_arr_type; 

    i_rec Table1%ROWTYPE; 
    v_num number; 

BEGIN 
    --- This is how you store value to a collection 
    SELECT num 
     bulk collect into var1 
    FROM Table3; 

    --- Loop to get individual records from your collection 
    For i in 1..var1.count 
    loop  
     SELECT a.num 
     into v_num    
      FROM Table2 a 
      --This is how you pass the value stored in your collection one by one in loop. 
      WHERE a.cod_agt = var1(i); 

     dbms_output.put_line(v_num); 
    end loop;    

END TEST; 
相關問題