Проблема с пользовательскими агрегатными функциями Oracle - PullRequest
3 голосов
/ 31 января 2012

У меня возникла эта досадная проблема с агрегатными udf-файлами, когда всегда не удается вызвать метод итерации.Мой код такой же, как и другие примеры в интернете (в том числе на 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;
/

Есть идеи о том, что может быть причиной этого?заранее спасибо

1 Ответ

3 голосов
/ 31 января 2012

Имена параметров в ваших реализациях функций ODCI должны совпадать с именами в документации ;поэтому вы должны использовать sctx, self и ctx2 вместо wminst и wminst2.

Edit Как кратко упомянуто APC, похоже, чтоself что требуется;Вы можете использовать что-то другое вместо sctx и ctx2.Я не могу найти ссылку на документацию ...

Редактировать 2 Да, я могу ... Ссылка APC на то, что это объект, привела меня к этому .

...