まず、型の定義がプロシージャの外部のコードに表示されるようにするには、型をプロシージャの外部で宣言する必要があります。SQLで型を宣言することができます
CREATE TYPE list_of_names_t
AS TABLE OF NUMBER;
または、PL/SQLで宣言できます
CREATE OR REPLACE PACKAGE types_package
AS
TYPE list_of_names_t
IS TABLE OF emp.emp_index%type;
END;
その場合、プロシージャはSQLタイプを使用して返す必要があります
CREATE OR REPLACE PROCEDURE sample_procedure(
p_ignore_indexes OUT list_of_names_t
)
AS
BEGIN
-- Logic here which fills the values in the collection p_ignore_indexes
END;
またはPL/SQLタイプ
CREATE OR REPLACE PROCEDURE sample_procedure(
p_ignore_indexes OUT types_package.list_of_names_t
)
AS
BEGIN
-- Logic here which fills the values in the collection p_ignore_indexes
END;
もちろん、コードの目的がコレクションを返すことである場合は、プロシージャよりも関数を作成する方が理にかなっています。
CREATE OR REPLACE FUNCTION sample_function
RETURN types_package.list_of_names_t
AS
ignore_indexes types_package.list_of_names_t;
BEGIN
-- Logic here which fills the values in the collection ignore_indexes
RETURN ignore_indexes;
END;
プロシージャを呼び出すと、次のようになります。
DECLARE
l_ignore_indexes types_package.list_of_names_t;
BEGIN
l_ignore_indexes := sample_function;
-- Do something with l_ignore_indexes
END;
また
DECLARE
l_ignore_indexes types_package.list_of_names_t;
BEGIN
sample_procedure( l_ignore_indexes );
-- Do something with l_ignore_indexes
END;