1

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 = '&REGION' 

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が認識されていないようですが、なぜですか?

4

3 に答える 3

3

SQLコマンドからスペースと、場合によってはコメントを削除して、試してみることをお勧めします。SQL*Plus は、コマンドに埋め込まれたスペースにうるさいです。二重ダッシュ コメントと SQL*Plus スクリプトで問題が発生したことさえあります。スペースだと思いますが、コメントの場合はコメントの/* ... */スタイルを使用してください。

于 2013-01-14T14:25:04.683 に答える
3

crontab で、シェルで直接 SQL を実行している可能性はありますか?

sqlplus...<<ESQL
select..
...
order by case end;

? その場合は、空白行を削除してください。

それ以外の場合は、次のようになります。

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.
于 2013-01-14T14:23:25.777 に答える
0

何らかの理由で、パーサーは文を case 文ではなくcasePLSQL 文として解釈しているようです。つまり、式は列の一部としてではなく、PLSQL ステートメントの一部として認識されます。「SP」エラー メッセージは、言語自体ではなく SQL-Plus を参照しています。caseSELECT

私の推測では、selectステートメントの上の何かがスクリプトを混乱させていると思います。

于 2013-01-14T14:18:07.657 に答える