正しい SQL なはずなのに、SQL*Plus で実行すると、SP2-0734 が発生する。
SQL> @test.sql SP2-0734: unknown command beginning "CASE WHEN ..." - rest of line ignored. ...
エラーになっている箇所を見てみると、
END COL1,
CASE WHEN
空行を削除して、
$ perl -i.org -ne '/^\s*$/ or print' test.sql
再実行してみると、
SQL> @test.sql 1 rows selected
おk!
というわけで原因は空行だった。
つまり、
SQL> select * from 2 SQL> dual; SP2-0042: unknown command "dual" - rest of line ignored.
こういうこと。
「SP2-」って何だろ?たぶん、SQL*Plus の SP な気がする。
「ORA-」はサーバープロセスとかが返すエラーで、「SP2-」はSQL*Plusが返すエラーじゃないかと。