如何让PLSQL函数支持不定参数

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
现在有这个需要:A B C D E字段
如果ABCDE都为空,得到空,
如果有一个不为空,得到他们的合计值
写起来麻烦。
decode( decode(a,null,1,0) +decode(b,null,1,0) ....
5,null,
nvl(A,0) +NVL(B,0) +NVL(C,0) +NVL(D,0+NVL(E,0))
)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
decode(a,null,1,0)可以写成nvl2(a,1,0),稍微少一点文字。
不过我觉得的用Case可能好点
Case
when a is null and b is null and c is null .........
then null
else
nvl(a,0) + nvl(b,0 ) + nvl(c,0) + ...
end
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我是需要自定义一个函数,可以实现 myadd(a,b,c,d,e).
象greatest这样的函数
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
参数列表里用default
给你个例子
CREATE OR REPLACE FUNCTION Get_Phase_Status (jd1 IN VARCHAR2,

jd2 IN VARCHAR2 DEFAULT 'NOPARAMETER',

jd3 IN VARCHAR2 DEFAULT 'NOPARAMETER'

)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
如果这样的写法,我可能要写N多个参数,其他都是默认NULL了。
这个也许就没有解。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
嗯,要不就是你就放一个字符串作为函数的参数
即:把你要传入的参数通过特定分隔符组合成一个字符串再传给函数
然后在函数中解析参数,再进行求值
比如myadd('a,b,c,d,e')
如果是javascript这个就比较简单了,可以通过函数的length属性查询到函数的参数个数
c/java也可通过args数组获得参数
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 lastwinner 发布
[B]嗯,要不就是你就放一个字符串作为函数的参数
即:把你要传入的参数通过特定分隔符组合成一个字符串再传给函数
然后在函数中解析参数,再进行求值
比如myadd('a,b,c,d,e')
如果是javascript这个就比较简单了,可以通过函数的length属性查询到函数的参数个数
c/java也可通过args数组获得参数 [/B]

instr( ...)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
可以在包在用重載的方法
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 HuiYi_love 发布
[B]可以在包在用重載的方法 [/B]


能否详细讲一讲包的重载呢?俺一致没弄搞这个
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
参数个数不定,不建议使用重载
包的重载,可以参考java/c的重载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行