当我尝试运行以下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列的错误:
DB端没有ORA-00904:“ PSTATUSTYPE ”:无效的标识符
00904. 00000 - “%s:无效标识符”
*原因:
*动作:行错误:67列:11
psstatustype
。我正在为where子句下的案例分发动态创建它。请帮忙!!
此致 fuko
答案 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
,它将在每次运行查询时提示您输入值。不同的客户可能需要一种不同的方式来指定和填充参数。