【发布时间】:2018-08-15 13:01:33
【问题描述】:
对于 ISBN['9780495809135'],如果 CATEGORY_EXISTS 列返回为 1234,3454,则查询将抛出错误。如果返回单行,则不会抛出错误。
我想在最顶层的查询中写下,如果 CATEGORY_EXISTS ='Category Not Found' 那么 FILE_NAME 列应该显示为 'files not found' 否则将用逗号分隔的 CATEGORY_EXISTS 值传递给最顶层的查询。
请注意,这只是伪查询,在实际查询中还有很多其他表和连接,
ORA-01722: 无效号码 01722. 00000 - “无效号码” *原因:指定的号码无效。 *操作:指定一个有效的数字。
SELECT ISBN ,
(SELECT LISTAGG(ANP.FILE_NAME, ',') WITHIN GROUP (
ORDER BY ANP.FILE_NAME)
FROM TABLE1 T
WHERE T.NODE_ID IN( CATEGORY_EXISTS)
)FILE_NAME
FROM
(SELECT ISBN,
(SELECT (
CASE
WHEN COUNT(DISTINCT AN.ID) > 0
THEN LISTAGG(AN.ID, ',') WITHIN GROUP (
ORDER BY AN.ID)
ELSE 'Category Not Found'
END )
FROM TABLE1 aca
JOIN TABLE2 AN
ON ACA.CHILD_NODE_ID=AN.ID
WHERE PARENT_NODE_ID=GT_CHILD_NODE_ID
) CATEGORY_EXISTS
FROM
(SELECT ISBN,
(SELECT ID FROM TEMP_CHILD_ASSOC ac WHERE CHILD_NODE_NAME=GT.ISBN
) GT_CHILD_NODE_ID
FROM MAIN_TABLE GT
WHERE ISBN='9780495809135'
)
);
【问题讨论】:
-
CATEGORY_EXISTS是一个字符串,通过LISTAGG()构建;您在IN()子句中使用该字符串。你期待发生什么?为什么要使用这么多子查询? -
为什么当 CATEGORY_EXISTS 值传递到此处 T.NODE_ID IN(CATEGORY_EXISTS) 时会抛出“无效数字”错误?因为性能问题,我不得不创建这么多子查询。这是示例查询,实际上有很多表和相关的连接。