- BOOLEAN
 - табличные типы, объявленные в спецификации пакета
 - ассоциативные массивы (index by)
 
Пример:
create or replace package tst is
  TYPE tpt IS TABLE OF VARCHAR2(100);
  TYPE tpt_indexed IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
  
  PROCEDURE p;  
  PROCEDURE p2;
  PROCEDURE p3;  
  FUNCTION f(a BOOLEAN) RETURN VARCHAR2; 
end tst;
/
create or replace package body tst is
  t1 tpt;
  t1_ind tpt_indexed;
  
  PROCEDURE p IS
    i NUMBER;
  BEGIN
    t1 := tpt('table type 1', 'table type 2');
  
    FOR rec IN (SELECT VALUE(t) t FROM TABLE(t1) t) LOOP
      dbms_output.put_line(rec.t);      
    END LOOP;
  END;
  PROCEDURE p2 IS
    i NUMBER;
  BEGIN
    t1_ind(1) := 'table index by - 1';
    t1_ind(2) := 'table index by - 2';
  
    FOR rec IN (SELECT VALUE(t) t FROM TABLE(t1_ind) t) LOOP
      dbms_output.put_line(rec.t);      
    END LOOP;
  END;
  FUNCTION f(a BOOLEAN) RETURN VARCHAR2 IS
  BEGIN
    IF a THEN 
      RETURN 'param is true';
    ELSE
      RETURN 'param is false';
    END IF;
  END;
  
  PROCEDURE p3 IS
    i1 VARCHAR2(20);
    i2 VARCHAR2(20);
  BEGIN
    EXECUTE IMMEDIATE 'SELECT tst.f(:p1), tst.f(:p2) FROM dual' INTO i1, i2 USING 1=1, 1=0;
    dbms_output.put_line(i1);
    dbms_output.put_line(i2);    
  END;  
end tst;
BEGIN
  tst.p;
  tst.p2;
  tst.p3;  
END;
/
Results:
table type 1
table type 2
table index by - 1
table index by - 2
param is true
param is false
/Комментарии
- Определение типа должно находится в спецификации. В теле не работает
 - Что бы передать boolean необходимо использовать EXECUTE IMMEDIATE - USING
 
Комментариев нет:
Отправить комментарий