ORA-00904:“PSTATUSTYPE”:无效标识符00904. 00000 - “%s:无效标识符”*原因:*操作:行错误:67列:11

时间:2018-05-31 05:08:23

标签: oracle case identifier ora-00904

当我尝试运行以下SQL时:

SELECT  
p_mv.created_by                            createby, 
from  pipeline             p_mv, 
pipeline             p_con, 

route route_s , 

 where  
    "pstatustype"='CTA'
     and
    case when pstatustype='CTA' then p_con.created_date
           when pstatustype='VAD' then route_s.orgn_vsl_arvl_date
           when pstatustype='ETA' then route_s.arrival_date
           else null -- default anyway
      end Between to_date('&1','DD-MON-YYYY:HH24:MI:SS')
              AND to_date('&2','DD-MON-YYYY:HH24:MI:SS');

我收到了psstatustype列的错误:

  

ORA-00904:“ PSTATUSTYPE ”:无效的标识符
    00904. 00000 - “%s:无效标识符”
     *原因:
  *动作:行错误:67列:11

DB端没有

psstatustype。我正在为where子句下的案例分发动态创建它。请帮忙!!

此致     fuko

1 个答案:

答案 0 :(得分:0)

  

"它是一个参数。"

您发布的SQL被破坏了,所以这是一个工作示例(例如,您有一个没有连接条件的交叉连接,因此它将返回一个笛卡尔积)。无论如何,它向您展示了您需要做的事情:

SELECT  
     ....
from  pipeline             p_mv, 
      pipeline             p_con, 
      route route_s , 
 where  
    case '&pstatustype'
           when 'CTA' then p_con.created_date
           when 'VAD' then route_s.orgn_vsl_arvl_date
           when 'ETA' then route_s.arrival_date
           else null -- default anyway
      end 
      between to_date('&1','DD-MON-YYYY:HH24:MI:SS')
              AND to_date('&2','DD-MON-YYYY:HH24:MI:SS');

这使用SQL * Plus替换变量语法&pstatustype,它将在每次运行查询时提示您输入值。不同的客户可能需要一种不同的方式来指定和填充参数。