Oracle PL/SQL Tutorial/Collections/IN

Материал из SQL эксперт
Перейти к: навигация, поиск

IN and NOT IN Operators

You can use the IN and NOT IN operators to check if the contents of one nested table appear or don"t appear in the contents of another nested table.



SQL>
SQL> CREATE OR REPLACE PROCEDURE in_example AS
  2    TYPE nestedTableType IS TABLE OF VARCHAR2(10);
  3    myTable1 nestedTableType;
  4    myTable2 nestedTableType;
  5    myTable3 nestedTableType;
  6    result BOOLEAN;
  7  BEGIN
  8    myTable1 := nestedTableType("A", "B", "C");
  9    myTable2 := nestedTableType("D", "E", "F");
 10    myTable3 := nestedTableType("A", "B", "C");
 11
 12    result := myTable3 IN (myTable1);
 13    IF result THEN
 14      DBMS_OUTPUT.PUT_LINE("myTable3 in myTable1");
 15    END IF;
 16
 17    result := myTable3 NOT IN (myTable2);
 18    IF result THEN
 19      DBMS_OUTPUT.PUT_LINE("myTable3 not in myTable2");
 20    END IF;
 21  END in_example;
 22  /
Procedure created.
SQL> CALL in_example();
myTable3 in myTable1
myTable3 not in myTable2
Call completed.
SQL>


NOT IN example (table collection)

SQL> CREATE OR REPLACE PROCEDURE in_example AS
  2    TYPE charTable IS TABLE OF VARCHAR2(10);
  3    emp1 charTable;
  4    emp2 charTable;
  5    emp3 charTable;
  6    result BOOLEAN;
  7  BEGIN
  8    emp1 := charTable("A", "B", "C");
  9    emp2 := charTable("C", "D", "E");
 10    emp3 := charTable("A", "B", "C");
 11
 12
 13
 14    result := emp3 NOT IN (emp2);
 15    IF result THEN
 16      DBMS_OUTPUT.PUT_LINE("emp3 not in emp2");
 17    END IF;
 18  END in_example;
 19  /
Procedure created.
SQL>