0

私は以下のような手順を持っています:

SET serveroutput ON 
    DECLARE 
        TYPE list_of_names_t 
          IS TABLE OF emp.emp_index%TYPE; 
        ignoreIndexes LIST_OF_NAMES_T := List_of_names_t();
    BEGIN
    -- Logic here which fills the values in the collection ignoreIndexes and           considerIndexes  
    -- Line XX   
END;

XX行目に、以下の行を追加したい

SELECT * FROM emp WHERE emp_index NOT IN ignoreIndexesしかし、正しい構文を取得できません。それを可能にする方法は?

4

1 に答える 1

0

コレクション型が で宣言されている場合はschema level、 でまたは動的に使用できますSQL statements。この作業を行うには、次の手順を実行します。

  1. CREATE OR REPLACE TYPE list_of_names AS OBJECT(emp_index NUMBER);

  2. 作成または置換型 list_of_names_t は list_of_names のテーブルです。

  3. 以下に示すように、匿名ブロックを作成します。

    SET serveroutput ON 
    DECLARE 
       ignoreIndexes LIST_OF_NAMES_T := List_of_names_t();
       emp_cur  SYS_REFCURSOR;
    BEGIN
       -- Populate the collection with some data
     SELECT list_of_names(LEVEL) 
         BULK COLLECT INTO ignoreIndexes  
     FROM dual CONNECT BY LEVEL<21;
    
    
    OPEN emp_cur FOR 
              SELECT * 
               FROM EMP e 
                   WHERE NOT EXISTS(SELECT 1 
                                     FROM   table(ignoreIndexes) tt 
                                     WHERE  tt.emp_index = e.emp_index
                                    );   
    
    END;
    
于 2013-01-09T08:53:47.770 に答える