Oracle PL / SQL本地集合类型不允许出错

时间:2017-01-13 15:32:50

标签: oracle plsql

问候!有没有办法在Oracle SQL上执行下面的代码中提供的逻辑?我收到错误PLS-00642:SQL语句中不允许使用本地集合类型;对于变量var1和var2 ...

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 个答案:

答案 0 :(得分: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;