读书人

一个sql的有关问题 能否把括号去掉达到

发布时间: 2014-01-17 00:06:00 作者: rapoo

一个sql的问题 能否把括号去掉达到同样的效果
今天在公司写了一个简单的sql


SELECT N.APN_NI,
N.START_TIME_UTC_OFFSET,
CASE
WHEN 0 = :GUI_FILE_SOURCE THEN
(SELECT F.FILENAME
FROM IB_NRT_FILELIST F
WHERE N.NRT_FILE_ID = F.FILE_ID(+))
ELSE
(SELECT M.FILE_NAME
FROM IB_FMS_FILELIST M
WHERE N.FILE_ID = M.FILE_ID(+))
END AS FILENAME
FROM &CDR_TABLE& N,
IB_EVENT_STATE S,
IB_ERR_TYPE ET,
IB_PARTNER P
WHERE 1 = 1
AND N.ERR_TYPE_ID = ET.ERR_TYPE_ID(+)
AND N.STATE = S.STATE(+)
AND N.PARTNER_ID = P.PARTNER_ID(+)

但是用公司的框架保存sql到数据库的时候 对于then和else后面的括号解析不了 只有把then和else后面的括号去掉才能保存 如果如掉括号sql就肯定跑不动

请问下这个sql 怎么改动才能把then和else后面的括号去掉 又能让SQL跑起来
[解决办法]
引用:
Quote: 引用:

SELECT F.FILENAME
FROM IB_NRT_FILELIST F
WHERE N.NRT_FILE_ID = F.FILE_ID(+)
既然只取F的数据没必要用外连接,可以把(+)去掉,你说的框架工具是啥,不能修改sql ?
这个不是 外联的问题 我去掉了 还是不行 现在的问题是 我通过框架保存sql到数据库的时候 sql里面的THEN和ELSE后面的括号不能有,否则不能保存
有没有其他的写法

将CASE WHEN 换成DECODE试试呢,我不知道你的框架能不能解析decode里的括号
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

SELECT F.FILENAME
FROM IB_NRT_FILELIST F
WHERE N.NRT_FILE_ID = F.FILE_ID(+)
既然只取F的数据没必要用外连接,可以把(+)去掉,你说的框架工具是啥,不能修改sql ?
这个不是 外联的问题 我去掉了 还是不行 现在的问题是 我通过框架保存sql到数据库的时候 sql里面的THEN和ELSE后面的括号不能有,否则不能保存
有没有其他的写法

将CASE WHEN 换成DECODE试试呢,我不知道你的框架能不能解析decode里的括号

试了 不可以 decode后面的括号框架解析不过去,蛋疼的框架。

难道你的框架括号都不能解析,如果是这样,你就得从你框架想办法了
[解决办法]
SELECT APN_NI,
START_TIME_UTC_OFFSET,
CASE :GUI_FILE_SOURCE WHEN 0 THEN FILENAME ELSE FILE_NAME END FILENAME
FROM (
SELECT N.APN_NI,
N.START_TIME_UTC_OFFSET,
F.FILENAME,
M.FILE_NAME
/* CASE
WHEN 0 = :GUI_FILE_SOURCE THEN
(SELECT F.FILENAME
FROM IB_NRT_FILELIST F
WHERE N.NRT_FILE_ID = F.FILE_ID(+))
ELSE
(SELECT M.FILE_NAME
FROM IB_FMS_FILELIST M
WHERE N.FILE_ID = M.FILE_ID(+))
END AS FILENAME */
FROM &CDR_TABLE& N,
IB_EVENT_STATE S,
IB_ERR_TYPE ET,
IB_PARTNER P,


IB_NRT_FILELIST F,
IB_FMS_FILELIST M
WHERE 1 = 1
AND N.ERR_TYPE_ID = ET.ERR_TYPE_ID(+)
AND N.STATE = S.STATE(+)
AND N.PARTNER_ID = P.PARTNER_ID(+)
AND N.NRT_FILE_ID = F.FILE_ID(+)
AND N.FILE_ID = M.FILE_ID(+));


[解决办法]
不理解你说的框架是什么意思

读书人网 >oracle

热点推荐