Oracle PL/SQL тип локальной коллекции не допускается ошибка

С уважением! Существует ли способ выполнения логики, представленной в приведенном ниже коде на 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 в переменную и использовать переменную в предложении WHERE другой инструкции select. Возможно ли это?

1 ответ

  1. Я хотел бы сохранить выбранный результат в переменную и использовать
    переменная в предложении WHERE другой инструкции select. Заключаться в том
    вероятный

    Я не уверен, что вы хотите достичь, но глядя на вас заявления выше я приведу пример ниже:

    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;