Oracle에서 사용자 정의 집계 함수를 작성하고이 함수를 패키지 내의 다른 일부 기능과 함께 그룹화하려고합니다. 예를 들어 (내가 가지고있는 문제를 시뮬레이션) 숫자의 합이 보이는 할 내 사용자 지정 집계를 가정 같은 :패키지 내부의 사용자 정의 집계 함수
CREATE OR REPLACE TYPE SUM_AGGREGATOR_TYPE AS OBJECT (
summation NUMBER,
STATIC FUNCTION ODCIAggregateInitialize(agg_context IN OUT
SUM_AGGREGATOR_TYPE) RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT SUM_AGGREGATOR_TYPE,
next_number IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT SUM_AGGREGATOR_TYPE,
para_context IN SUM_AGGREGATOR_TYPE) RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateTerminate(self IN SUM_AGGREGATOR_TYPE,
return_value OUT NUMBER, flags IN NUMBER) RETURN NUMBER
);
CREATE OR REPLACE TYPE BODY SUM_AGGREGATOR_TYPE IS
STATIC FUNCTION ODCIAggregateInitialize(agg_context IN OUT
SUM_AGGREGATOR_TYPE)
RETURN NUMBER IS
BEGIN
agg_context := SUM_AGGREGATOR_TYPE(NULL);
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT SUM_AGGREGATOR_TYPE,
next_number IN NUMBER)
RETURN NUMBER IS
BEGIN
IF self.summation IS NULL THEN
self.summation := next_number;
ELSIF summation IS NOT NULL THEN
self.summation := self.summation + next_number;
END IF;
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT SUM_AGGREGATOR_TYPE,
para_context IN SUM_AGGREGATOR_TYPE)
RETURN NUMBER IS
BEGIN
self.summation := self.summation + para_context.summation;
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateTerminate(self IN SUM_AGGREGATOR_TYPE,
return_value OUT NUMBER, flags IN NUMBER)
RETURN NUMBER IS
BEGIN
return_value := self.summation;
return ODCIConst.Success;
END;
END;
나는 다음과 같은 함수 정의를 작성하는 경우 :
CREATE OR REPLACE FUNCTION MY_SUM(input NUMBER)
RETURN NUMBER PARALLEL_ENABLE AGGREGATE USING SUM_AGGREGATOR_TYPE;
을
및 해당 유형 선언 테스트 :
CREATE OR REPLACE TYPE VECTOR
IS
TABLE OF NUMBER;
이 성명 :
CREATE OR REPLACE PACKAGE MY_FUNCTIONS AS
FUNCTION MY_SUM(input NUMBER)
RETURN NUMBER PARALLEL_ENABLE AGGREGATE USING SUM_AGGREGATOR_TYPE;
END;
과 통해 호출 :와
select MY_FUNCTIONS.my_sum(column_value) from table(vector(1, 2, 1, 45, 22, -1));
폭발
select my_sum(column_value) from table(vector(1, 2, 1, 45, 22, -1));
함수 정의와 패키지를 생성 단 (70)의 정확한 결과를 얻을
ORA-00600: internal error code, arguments: [17090], [], [], [], [], [], [], [], [], [], [], []
사용자 정의 집계 함수를 패키지 선언 내에 중첩시킬 수 있습니까?
'ORA-00600'은 일반적으로 예상치 못한 기능 조합으로 인해 Oracle 버그를 나타냅니다. 정확한 오라클 버전은 무엇입니까? –
Oracle 11g Release 2 (11.2.0.1.0)를 사용하고 있습니다. – wcmatthysen
이 호에 어떤 소식이 있습니까? 나는 문제가 있지만, 나의 경우에는 연결이'ORA-03113 : 통신 채널에서 파일 끝 '으로 중단된다. 나는 이것이'ORA-00600'보다 더 나쁜 것 같아요. 'SELECT * FROM ALL_PROCEDURES'을 체크하면, 사용자 정의 집계가 올바르게 생성되고 등록되었음을 알 수 있습니다 ... –