- 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
Комментариев нет:
Отправить комментарий