• 締切済み

PL/SQLで文字列を分割

PL/SQLで、CSVファイルを読み込んでDBにデータを登録しようとしています。 CSVの1行を読み込んだあと、 カンマで区切ってリストに格納してくれるような 便利な関数は無いのでしょうか? 1行の先頭から1文字づつカンマかどうか調べて取り出す、よりも簡単な方法があれば是非教えて下さい。

みんなの回答

  • 7colors
  • ベストアンサー率25% (29/114)
回答No.4

SQL*loaderか何かで、テンポラリーか何かのTABLEに取り込んで、MERGEをかければ解決しませんか? そうすれば、重複は発生しないと思いますよ。 (しかも、1件ずつ比較するpl/sqlより早いはず)

guest98
質問者

補足

Oracle8i Release 8.1.6.0.0なので、MERGE文は使えません。

回答No.3

>よりも簡単な方法があれば ・SQL*Loaderを使う。 ・9i以降であれば、外部表として定義して、  insert into DEST select * from SRC; あたりが簡単で良いと思いますが。

guest98
質問者

補足

Oracle8i Release 8.1.6.0.0なんです。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.2

SQL*Loaderのコントロールファイルのパラメータで REPLACE ってありませんでしたっけ?確か置き換えだったような… 今マニュアルがないのでうろ覚えですが、マニュアルで確認してみて下さい。 それと、splitっていう関数ありません?

guest98
質問者

補足

REPLACEだと古いデータが全部消えてしまうと思うのですが、重複データだけ消したいのです。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

SQL*Loaderを使うというのは無しですか?

guest98
質問者

補足

なしなんです~。 最初はそうしていたのですが、 データに重複が発生するので、 PL/SQLで重複データを削除しながら登録することにしました。 ちなみに削除対象は、重複データの古い方のデータです。(もともとテーブルにあるデータ) 新しいほうを弾くのであればSQL*Loaderでよかったんですが。。。

関連するQ&A