programing

mariadb 사용자 정의 집계 함수

lastmoon 2023. 9. 14. 23:24
반응형

mariadb 사용자 정의 집계 함수

저는 mariadb 10.3.9를 사용하고 있으며 UDAF(사용자 정의 집계 함수)를 만들어 common_schema에 배치했습니다.이 스키마에는 동일한 서버의 다른 스키마/데이터베이스에서 사용할 수 있는 유틸리티 함수가 포함되어 있습니다.

문제는 다른 스키마를 사용하면서 UDAF를 호출할 때 항상 NULL을 반환한다는 것입니다!

다음은 이 문제를 설명하기 위한 것입니다.

CREATE SCHEMA IF NOT EXISTS common_schema;
DELIMITER $$
DROP FUNCTION IF EXISTS common_schema.add_ints $$
CREATE FUNCTION common_schema.add_ints(int_1 INT, int_2 INT) RETURNS INT NO SQL 
BEGIN 
    RETURN int_1 + int_2; 
END $$ 
DROP FUNCTION IF EXISTS common_schema.sum_ints $$
CREATE AGGREGATE FUNCTION common_schema.sum_ints(int_val INT) RETURNS INT 
BEGIN 
    DECLARE result INT DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN result; 
    LOOP FETCH GROUP NEXT ROW; 
        SET result = common_schema.add_ints(result, int_val); 
    END LOOP; 
END $$

DELIMITER ; 

이제 이렇게 부르면 예상대로 결과가 반환됩니다.

USE common_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t; 
-- result: 3

다른 스키마를 사용하여 호출하면 NULL:을 반환합니다.

USE other_schema;
SELECT common_schema.sum_ints(seq) 
FROM (SELECT 1 seq UNION ALL SELECT 2) t; 
-- result: null

내가 뭘 빠트렸나요?누락된 구성이 있습니까?

도와주셔서 감사합니다.

버그 https://jira.mariadb.org/browse/MDEV-18100 로 보고되었습니다.

해결 방법으로 모든 스키마에 UDAF를 만듭니다.

언급URL : https://stackoverflow.com/questions/52586307/mariadb-user-defined-aggregate-function

반응형