我正在尝试创建一个SQL报告。这是select语句:
select
-- ticket id
'<tr align=left valign=top><td width=95>'||maspid||'</td>'||
-- priority
case when instr(masfld017, '<|lang' ) = 0 then
'<td width=90>'||masfld017
else
'<td width=90>'||substr( masfld017, 1 , instrb(masfld017, '<|lang') - 1)
end||'</td>'||
-- customer
'<td width=150>'||masfld007||'</td>'||
-- status
'<td width=100>'||decode(masfld104, '0', 'Collected',
'1', 'Postponed',
'2', 'Accepted',
'3', 'in Progress',
'5', 'Work Around',
'7', 'Solved',
'8', 'Closed')||'</td>'||
-- subject
'<td width=400>'||masfld001||'</td>'||
-- full name
'<td width=100>' || replace(replace(masfld037, '<||>'), '</||>')||'</td>'||
-- creation date
'<td width=150>'||to_char(to_date(masfld022, 'YYYYMMDDHH24MI'), 'DD.MM.YYYY HH24:MM')||'</td>'||
-- target date
'<td width=150>'||to_char(to_date(masfld023, 'YYYYMMDDHH24MI'), 'DD.MM.YYYY HH24:MM')||'</td>'||
-- ticket type
'<td width=180>'||decode(masfld040, '9', 'HUS',
'8', 'Project',
'7', 'Enhancement',
'6', 'Complaint',
'5', 'Change Request',
'4', 'Bug (Do not use)',
'3', 'Support',
'2', 'Service Request',
'1', 'Incident (Problem)',
null, 'N/A')||'</td></tr>'
from
k2h.tmaster01 tm inner join k2h.tprofile tp on replace(replace(tm.masfld035, '<||>'), '</||>') = tp.propid
where
masfld024 is null and
masfld082 = '®ION'
order by case masfld017
when 'Emergency' then 1
when 'Critical' then 2
when 'High' then 3
when 'Major Problem' then 4
when 'Major defect' then 5
when 'Semi-major defect' then 6
when 'Medium' then 7
when 'Minor Problem' then 8
when 'Low' then 9
end;
如果我直接用sqldeveloper运行它,我会得到一个结果列表。如果报告由crontab启动,则会失败,并显示以下错误消息:
SP2-0734: unknown command beginning "case when ..." - rest of line ignored. SP2-0734: unknown command beginning "'
似乎command
无法识别,但为什么?
答案 0 :(得分:3)
在crontab中,您是否可以在shell中运行SQL direct 例如
sqlplus...<<ESQL
select..
...
order by case end;
? 如果是这样,请删除BLANK行。
否则你会得到类似的东西:
SQL> select
2 -- ticket id
3 '<tr align=left valign=top><td width=95>'||maspid||'</td>'||
4
SQL> -- priority
SQL> case when instr(masfld017, '<|lang' ) = 0 then
SP2-0734: unknown command beginning "case when ..." - rest of line ignored.
答案 1 :(得分:3)
我建议删除空格,甚至可能删除SQL命令中的注释,然后尝试。 SQL * Plus对命令中嵌入的空格很挑剔。我甚至遇到过双击注释和SQL * Plus脚本的问题。我认为这是空格,但如果是评论,请使用/* ... */
评论方式。
答案 2 :(得分:0)
由于某种原因,解析器似乎将case
语句解释为PLSQL case
语句,而不是SELECT
case语句。也就是说,它没有将表达式视为列的一部分,而是作为PLSQL语句的一部分。 “SP”错误消息是指SQL-Plus而不是语言本身。
我的猜测是,select
语句之上的某些内容会使脚本混乱。