2

PL/SQLに以下のストアドプロシージャがあります。

CREATE OR REPLACE PROCEDURE sample_procedure AS 
DECLARE 
    TYPE list_of_names_t 
      IS TABLE OF emp.emp_index%TYPE; 
    ignoreIndexes LIST_OF_NAMES_T := List_of_names_t();
BEGIN
-- Logic here which fills the values in the collection ignoreIndexes   
END;

以下のように、外部からこのストアドプロシージャを呼び出す場合:

    SET SERVEROUTPUT ON
    EXEC sample_procedure
    -- Line YY

ignoreindexes@行YY、ストアドプロシージャで準備されたコレクションにインデックスがないempテーブルからレコードを取得したいと思います。

1)ストアドプロシージャで作成されたネストされたテーブルignoreindexesを外部に返して、そのテーブルのインデックスを使用できるようにする方法

前もって感謝します

4

1 に答える 1

8

まず、型の定義がプロシージャの外部のコードに表示されるようにするには、型をプロシージャの外部で宣言する必要があります。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;
于 2013-01-10T00:47:47.830 に答える