Проблема с пользовательскими агрегатными функциями Oracle
У меня есть эта досадная проблема с aggregate udfs, где он всегда не может вызвать метод итерации. Мой код точно такой же, как и другие примеры в интернете (в том числе в 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 ответ:
Имена параметров в ваших реализациях функций ODCI должны совпадать с именами в документации ; поэтому вы должны использовать
sctx
,self
, иctx2
, а неwminst
иwminst2
.Редактировать как APC кратко упомянул, это только кажется, чтобы быть
self
, что требуется; вы можете использовать что-то другое в местоsctx
иctx2
. Я не могу найти справку по документации...Edit 2 Да, я могу... Справочник АПК на объект, что привело меня к это .