一个奇怪的错误,高分跪求答案
/* Formatted on 2009/09/22 13:51 (Formatter Plus v4.8.0) */
SELECT rf1.rf_id, wk1.wassign_id, rf1.cust_addr, wa1.NAME, wk1.state,
TO_CHAR (wk1.dispatch_date, 'yyyy-mm-dd HH:mi:ss') dispath,
TO_CHAR (wk1.reply_date, 'yyyy-mm-dd HH:mi:ss') reply,
wk1.CATEGORY cata,
(SELECT MAX (sf1.NAME)
FROM (SELECT *
FROM rf_log
UNION ALL
SELECT *
FROM rf_log_his) log1, staff sf1
WHERE sf1.staff_id = log1.staff_id
AND log1.wassign_id = wk1.wassign_id
AND log1.action_code = 'WA_BROWSE') name2
FROM (SELECT temp1.rf_id, temp1.cust_addr
FROM (SELECT *
FROM rf
UNION ALL
SELECT *
FROM rf_his) temp1) rf1,
(SELECT temp2.rf_id, temp2.wassign_id, temp2.CATEGORY,
temp2.warea_id, temp2.state, temp2.dispatch_date,
temp2.reply_date
FROM (SELECT *
FROM work_assign
UNION ALL
SELECT *
FROM work_assign_his) temp2
WHERE temp2.state != 'X') wk1,
work_area wa1
WHERE wk1.rf_id = rf1.rf_id(+) AND wa1.warea_id = wk1.warea_id(+)
ORDER BY wa1.warea_id
以上是一条SQL语句,运行后总在第一个to_char函数位置提示ORA-00936: 缺少表达式,但去掉最后一个where条件,也就是去掉wk1.rf_id = rf1.rf_id(+) AND 这句,就能正常执行了,请哪位高手看下,高分重谢!
------解决方案--------------------去掉wk1.rf_id = rf1.rf_id(+) AND 这句,就能正常执行了
感觉不像是第一个to_char函数导致的问题。
你直接打wk1.dispatch_date试试,不用to_char,看看有没有错。
------解决方案--------------------你创建伪表wk1的dispatch_date时候,取的字段是temp2.dispatch_date,是不是要来个别名,这样wk1.dispatch_date才能找到dispatch_date这个字段。(个人怀疑的地方)
------解决方案--------------------这是原句吗?去掉where 连接条件就行了
是不是where 前多了一个逗号
把左连接用用left join写试试
------解决方案--------------------
将 第一个to_char ”TO_CHAR (wk1.dispatch_date, 'yyyy-mm-dd HH:mi:ss') dispath,“
换成 TO_CHAR (nvl(wk1.dispatch_date,null), 'yyyy-mm-dd HH:mi:ss') dispath,
试试,个人感觉是因为这个where条件里面的(+)导致的null值问题。
------解决方案--------------------要不你将 WHERE wk1.rf_id = rf1.rf_id(+) AND wa1.warea_id = wk1.warea_id(+)
换成 WHERE wk1.rf_id = rf1.rf_id AND wa1.warea_id = wk1.warea_id
试试看