【DM版本】:8
【操作系统】:麒麟Linux
【CPU】:32C
【问题描述】*:定义求多个数据加和的函数,参数个数不固定(类似COALESCE函数),请问入参怎么写?参考百度的下面写法编译报错:
CREATE OR REPLACE FUNCTION plus(inList VARIADIC)
RETURN DOUBLE
AS
total DOUBLE := NULL;
BEGIN
FOR i IN 1..array_length(inList, 1) LOOP
if inList[i] is not null
then
total := nvl(total,0) + inList[i];
end if;
END LOOP;
RETURN total;
END;
做个实验,看看是否符合你的预期
首先,创建一个类型对象
DROP TYPE IF EXISTS VARIADIC;
CREATE TYPE VARIADIC IS TABLE OF NUMBER;
然后创建一个测试用的函数
CREATE OR REPLACE FUNCTION PLUS(INLIST VARIADIC)
RETURN DOUBLE
AS
TOTAL DOUBLE := NULL;
BEGIN
FOR I IN 1..INLIST.COUNT LOOP
IF INLIST[I] IS NOT NULL THEN
TOTAL := NVL(TOTAL,0) + INLIST(I);
END IF;
END LOOP;
RETURN TOTAL;
END;
下面是测试过程
--一个参数
SELECT PLUS(VARIADIC(ID))
FROM SYSOBJECTS;
--两个参数
SELECT PLUS(VARIADIC(ID,SCHID))
FROM SYSOBJECTS;
--三个参数
SELECT PLUS(VARIADIC(ID,SCHID,INFO1))
FROM SYSOBJECTS;
--四个参数
SELECT PLUS(VARIADIC(ID,SCHID,INFO1,INFO2))
FROM SYSOBJECTS;
通过自定义函数就可以计算,例如以逗号分隔的数字组成的字符串求数字之后。