日期:2014-05-17  浏览次数:20835 次

一个奇怪的错误,高分跪求答案
/* 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
试试看