0

私のタイプ:

TYPE T_rowBalanceListForClient IS RECORD
(
    RowCode Asset.RowCode%TYPE,
    RowName Asset.RowName%TYPE
);  
TYPE T_tableBalanceListForClient IS TABLE OF T_rowBalanceListForClient;

私の機能:

FUNCTION F_BalanceListForClient
(
    p_ClientId Client.ClientId%TYPE
)
RETURN T_tableBalanceListForClient PIPELINED
AS
    CURSOR CUR_TABLE IS
        SELECT
                RowCode,
                RowName
            FROM Asset;
BEGIN

    FOR CUR_REC IN CUR_TABLE LOOP
        PIPE ROW(CUR_REC);
    END LOOP;

END;

私のストアドプロシージャの一部:

    sql_statement := ' SELECT * FROM TABLE(:1)';
    OPEN c_Result FOR sql_statement USING F_BalanceListForClient(11);

パッケージのビルド中に、次の Oracle エラーが表示されます。

PLS-00457: 式はSQL型である必要があります

一般的なストアド プロシージャでは、次のような呼び出しが構築され、適切に動作します (ダイナミクスではありません)。

PROCEDURE GET_BALANCE_STANDARD_LIST
(
    c_Result OUT SYS_REFCURSOR,
    p_ClientId Client.ClientId%TYPE DEFAULT NULL
)
AS
BEGIN
    OPEN c_Result FOR
        SELECT RowName FROM TABLE(F_BalanceListForClient(p_ClientId));
END;

どんな助けにも感謝します。ありがとう。

4

1 に答える 1