Tuesday, January 17, 2006

Oracle SQL の DISTINCT でエラー

Oracle の SQL で DISTINCT を使って重複行を削除しようとしても
SELECT のカラムに LOB 型があると ORA-00932 というエラーが出る。
これは型が不適合というエラーのようだ。

LOB 型を ORDER BY 句や WHERE 句の中で使っても
同様のエラーが出る。

LOB 型を単純に比較することができないのでこのエラーが出るのだろう。

Oracle のスクリプトで空行によるエラーが出るとき

Oracle でスクリプトを走らせる場合、SQL 文の途中に空行があると
SP-0734 というエラーが出てしまう。これは SQL*Plus で
SQL 文をコピー&ペーストしたときも同じ。ペーストした
SQL 文の途中に空行があると同じエラーが出てしまう。

SQL*Plus 内で

@hoge.sql

を実行したときは問題ないのだが、

sqlplus username/password@orcl <hoge.sql

のようにしたときにはこの問題が出る。

Monday, January 16, 2006

Oracle 10g における VIEW の外部結合でエラー

Oracle 10g で VIEW をつくって、それらを完全外部結合したら
ORA-03113 エラーが発生してしまう。ネットで調べてみると
同様の現象が報告されていて、どうも Oracle のバグらしい。
Oracle 再起動で直ることもあるとか。非力なマシンで
やっているので、もっとマシなサーバでやればうまくいくのかもしれない。

とりあえず、VIEW をテーブルにコピーして、テーブルを
外部結合させたらうまくいった。

SELECT top.seq_no top_news_grp,
general.seq_no general_news_grp,
stock.seq_no stock_news_grp,
money.seq_no money_news_grp
FROM
v_top_news_grp top
FULL OUTER JOIN
v_general_news_grp general ON ( top.seq_no = general.seq_no )
FULL OUTER JOIN
v_stock_news_grp stock ON ( top.seq_no = stock.seq_no OR general.seq_no = stock.seq_no )
FULL OUTER JOIN
v_money_news_grp money ON ( top.seq_no = money.seq_no OR general.seq_no = money.seq_no
OR stock.seq_no = money.seq_no );