Создайте тип коллекции в области действия SQL:
CREATE TYPE stringlist IS TABLE OF VARCHAR2(20);
Затем вы можете использовать его в операторах SQL и в PL / SQL (тогда как, если вы определяете коллекцию в PL / SQL scope, тогда вы можете использовать его только в PL / SQL).
Затем вы можете определить спецификацию вашего пакета:
CREATE PACKAGE test_package IS
FUNCTION test_fn(
a IN INTEGER DEFAULT 1,
b IN stringlist DEFAULT stringlist('a','b','c')
) RETURN stringlist PIPELINED;
END;
/
И тело пакета:
CREATE PACKAGE BODY test_package IS
FUNCTION test_fn(
a IN INTEGER DEFAULT 1,
b IN stringlist DEFAULT stringlist('a','b','c')
) RETURN stringlist PIPELINED
IS
BEGIN
IF b IS NULL THEN
RETURN;
END IF;
FOR i IN 1 .. b.COUNT LOOP
PIPE ROW ( b(i) || a );
END LOOP;
END;
END;
/
И использовать его в SQL с аргументами по умолчанию:
SELECT *
FROM TABLE( test_package.test_fn() );
Какие выходные данные:
| COLUMN_VALUE |
| :----------- |
| a1 |
| b1 |
| c1 |
Или предоставить свои собственные аргументы :
SELECT *
FROM TABLE(
test_package.test_fn(
b => stringlist('d','e','f','g')
)
);
Какие выходы:
| COLUMN_VALUE |
| :----------- |
| d1 |
| e1 |
| f1 |
| g1 |
db <> Fiddle здесь