3

反復メソッドの呼び出しに常に失敗する集計 udfs で、この厄介な問題が発生しています。私のコードは、Web 上の他の例 (oracle docs および asktom のものを含む) とまったく同じです。UDF タイプを変更しようとしましたが、毎回同じことが起こります。それは言います:

ORA-29925: cannot execute DBAODB.WMCONCATROUTINES.ODCIAGGREGATEITERATE
ORA-06553: PLS-306: wrong number or types of arguments in call to 'ODCIAGGREGATEITERATE'

Oracle のバージョンは 11.1.0.7.0 で、私のコードは次のとおりです。

CREATE OR REPLACE TYPE WmConcatRoutines as object (
    tmpData number,

    STATIC FUNCTION ODCIAggregateInitialize( wmInst IN OUT WmConcatRoutines) RETURN number,
    MEMBER FUNCTION ODCIAggregateIterate(wmInst IN OUT WmConcatRoutines, value number) return number,
    MEMBER FUNCTION ODCIAggregateMerge(wmInst IN OUT WmConcatRoutines, wmInst2 IN WmConcatRoutines) return number,
    MEMBER FUNCTION ODCIAggregateTerminate(wmInst IN WmConcatRoutines, returnValue OUT number, flags IN number) return number
);
/

CREATE OR REPLACE TYPE BODY WmConcatRoutines IS 
    STATIC FUNCTION ODCIAggregateInitialize( wmInst IN OUT WmConcatRoutines) RETURN number IS
    BEGIN
        wmInst := WmConcatRoutines(0);
        return ODCIConst.Success;
    END;

    MEMBER FUNCTION ODCIAggregateIterate(wmInst IN OUT WmConcatRoutines, value number) return number IS
    BEGIN
        wmInst.tmpData := wmInst.tmpData + value;
        return ODCIConst.Success;
    END;

    MEMBER FUNCTION ODCIAggregateTerminate(wmInst IN WmConcatRoutines, returnValue OUT number, flags IN number) return number IS
    BEGIN
        returnValue := wmInst.tmpData;
        return ODCIConst.Success;
    END;

    MEMBER FUNCTION ODCIAggregateMerge(wmInst IN OUT WmConcatRoutines, wmInst2 IN WmConcatRoutines) return number IS
    BEGIN
        wmInst.tmpData := wmInst.tmpData + wmInst2.tmpData;
        return ODCIConst.Success;
    END;
END;
/

CREATE OR REPLACE FUNCTION WM_CONCAT_test (input number) RETURN number 
    parallel_enable 
    AGGREGATE USING WmConcatRoutines;
/

これを引き起こしている可能性のあるアイデアはありますか?前もって感謝します

4

1 に答える 1

3

ODCI関数の実装におけるパラメータ名は、ドキュメントのものと一致する必要があります。したがって、 andではなくsctx、 、 andを使用する必要があります。selfctx2wminstwminst2

編集APC が簡単に述べたように、self必要なだけのようです。sctxとの代わりに別のものを使用できますctx2。ドキュメント参照が見つかりません...

編集 2はい、できます... APC がオブジェクトであると言及したことで、これにたどり着きまし

于 2012-01-31T18:06:38.417 に答える