我当前的SQL如下:
CASE
WHEN PARENT.ASLNO IS NULL THEN SUBCATEGORIES.SUBCATEGORY_LIST
-- #5098
ELSE DECODE(ASL.CATEGORY_NAME, null,
NVL(SUBCATEGORIES.SUBCATEGORY_LIST,
SUBCATEGORIES_PARENT.SUBCATEGORY_LIST),
decode(SUBCATEGORIES.SUBCATEGORY_LIST,null,null,'N/A'))
-- End #5098
END AS SUPSPD_SUBCATEGORY_LIST
我正在尝试更改以下sql
DECODE(ASL.CATEGORY_NAME, null,
NVL(SUBCATEGORIES.SUBCATEGORY_LIST,
SUBCATEGORIES_PARENT.SUBCATEGORY_LIST),
decode(SUBCATEGORIES.SUBCATEGORY_LIST,null,null,'N/A'))
到
DECODE(ASL.CATEGORY_NAME, null,
DECODE(SUBCATEGORIES.SUBCATEGORY_LIST,
SUBCATEGORIES_PARENT.SUBCATEGORY_LIST),
decode(SUBCATEGORIES.SUBCATEGORY_LIST,null,null,'N/A'))
但我得到ORA-00938没有足够的功能参数?
答案 0 :(得分:2)
此:
NVL(SUBCATEGORIES.SUBCATEGORY_LIST,
SUBCATEGORIES_PARENT.SUBCATEGORY_LIST)
如果子元素为空,返回父子类别列表。
解码需要at least three arguments m,但您只提供了两个;您有第一个search
值但没有结果,也没有default
,这意味着您不会总是得到一个值。
你的NVL的等价物是:
DECODE(SUBCATEGORIES.SUBCATEGORY_LIST, NULL,
SUBCATEGORIES_PARENT.SUBCATEGORY_LIST, SUBCATEGORIES.SUBCATEGORY_LIS),
我不确定为什么你想让声明变得更长,更难以理解...为了某些一致性,我甚至可能想要改变
decode(SUBCATEGORIES.SUBCATEGORY_LIST,null,null,'N/A')
到
NVL2(SUBCATEGORIES.SUBCATEGORY_LIST, 'N/A', null)
答案 1 :(得分:1)
您已更改:
NVL(SUBCATEGORIES.SUBCATEGORY_LIST, SUBCATEGORIES_PARENT.SUBCATEGORY_LIST)
为:
DECODE(SUBCATEGORIES.SUBCATEGORY_LIST, SUBCATEGORIES_PARENT.SUBCATEGORY_LIST)
DECODE需要至少3个参数。
<强>除了强>
我发现通过像其他任何代码一样很好地调整复杂表达式来调试这样的复杂表达式要容易得多:
DECODE( ASL.CATEGORY_NAME
, null
, DECODE ( SUBCATEGORIES.SUBCATEGORY_LIST
, SUBCATEGORIES_PARENT.SUBCATEGORY_LIST
)
, decode ( SUBCATEGORIES.SUBCATEGORY_LIST
, null
, null
, 'N/A'
)
)