Как проверить, что значение НЕ находится в% ROWTYPE из оператора SQL - PullRequest
0 голосов
/ 28 сентября 2018

Я пишу хранимую процедуру PLSQL.Обратите внимание, что ниже это только часть, и фактический SP сложнее, чем это.Все, что я хочу знать, это то, что в моем вложенном запросе ниже, как я могу проверить, что определенное значение не находится в ROWTYPE, который я назвал 'l_05_data'?Есть ли способ сделать это без запуска через цикл.В настоящее время я понятия не имею, как сделать эту проверку в моем вложенном запросе, потому что я получаю ошибку ниже при компиляции.Кто-то, пожалуйста, предоставьте решение для этого.

**

Error(52,7): PL/SQL: SQL Statement ignored
Error(66,41): PL/SQL: ORA-00904: "l_05_data"."A2_ID_FK": invalid identifier
Error(66,51): PLS-00302: component 'A2_ID_FK' must be declared

**

хранимая процедура

create or replace PROCEDURE  TEST_SP()
  AS

  TYPE r05_array IS TABLE OF A2_TBL%ROWTYPE;
    l_05_data r05_array;

    CURSOR r5_cur
    IS
      SELECT a2.* 
      FROM A2_TBL a2;
  BEGIN
    OPEN r5_cur;
    LOOP
    BEGIN

      FETCH r5_cur BULK COLLECT INTO l_05_data LIMIT batch_limit;
      EXIT WHEN l_05_data.count() = 0;

      FOR indx IN l_05_data.FIRST ..l_05_data.LAST
      LOOP
            --some logic
      END LOOP;

      SELECT A1 BULK COLLECT
      INTO l_01_id_data
      FROM
        ( SELECT distinct column_value AS A1 FROM TABLE(l_01_id_data)
        MINUS
        (
          SELECT distinct a1.A1_ID
          FROM A1_TBL a1
          INNER JOIN A2_TBL a2
          ON a1.A1_ID = a2.A2_A1_ID_FK
          WHERE  a2.A2_STATUS !='X' 
          OR (a2.A2_A1_ID_FK NOT IN (l_05_data.A2_A1_ID_FK) AND a2.A2_STATUS = 'X')
          )
        );   
           COMMIT;

    EXCEPTION
        --exception is handled here

    END;
    END LOOP;
    CLOSE r5_cur;

  END TEST_SP;

ниже приведена схема двух таблициспользуется в СП enter image description here

...