• 締切済み

ORA-00917エラーが発生する

SQL*Loaderを使用してCSVファイルをテーブルにロードしたいのですが、 「ORA-00917 カンマがありません」というエラーが発生してしまいます。 制御ファイルやデータファイルのどこに問題があるのでしょうか。 ご教授願います テーブル定義 テーブル名 TB_HOGE ID varchar XML_DATA XMLType INS_YMD DATE USER VARCHAR CTLファイル OPTIONS(  ERRORS = 0 ) LOAD DATA CHARACTERSET UTF8 INFILE '/temp/foo/data.csv' INTO TABLE TB_HOGE APPEND XMLType(XML_DATA) FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (ID, XMLFILE FILLER CHAR, XML_DATA lobfile( XMLFILE ) terminated by EOF, INS_YMD "TO_DATA( :INS_YMD, 'YYYYMMDD')" USER) csvファイル data.csv ”No001","/temp/foo/xml/data1.xml","20150320","user1" ”No002","/temp/foo/xml/data2.xml","20150320","user1" よろしくお願いします。

  • Oracle
  • 回答数1
  • ありがとう数1

みんなの回答

  • tkf-
  • ベストアンサー率58% (821/1396)
回答No.1

> INS_YMD "TO_DATA( :INS_YMD, 'YYYYMMDD')" この行の最後、カンマがいるのでは?

tsuchinoko07
質問者

補足

すみません、そこは転記時のミスです… 実際のctlファイルではきちんとカンマが付いています。

関連するQ&A

  • csvをDBへ読み込んだら、NULLが勝手に0に

    csvファイルをMySQLへ読み込んだら、空白のところが勝手に0に置き換わってしまいました。 置き換わったカラムの型が、全部INTだったので、 試しにVARCHARへ変え、再度、取り込み処理を実施してみたところ、 希望通りに(空白のところは空白のままで)無事データを取り込むことが出来ました。 ■質問1 考えられる原因としては、DBの設定? それとも、PHP側の書き方でしょうか? ■質問2 データ型を決める際、数字はINT、文字列はVARCHAR、ぐらいの認識しかないのですが、 今回のように、INT型のカラムを、VARCHAR型に、変えたりすると、 起こり得るリスクとしては、どのようなものが考えられでしょうか? ■質問3 DBのデータ型が、「INT」と「VARCHAR」では、PHP側の書き方も変わってくるのでしょうか? □PHPの内容 ▽まず、UTF-8形式で上書き exec("nkf -w --overwrite data.csv"); ▽接続後読み込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `読み込むテーブルの名前` FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\\r\\n'";

    • ベストアンサー
    • PHP
  • pathを指定してCSVをインポートしたい

    すいません1つ質問があります。 こちらのサイトでCSVのファイルのインポート方法を勉強していますが、下記の方法だとあらかじめ、データベースが格納されているフォルダにCSVを置いてある前提でこのやり方をやります。 LOAD DATA INFILE "T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; 僕が知りたいのは、例えば、 C:\Users\Ken\Desktop\T01Prefecture.csv ここに置いてあるCSVを指定してインポートしたいと考えています。 そのやり方がどうもこのパスを書くだけでは出来ないです。 どなたかやり方を教えて頂けますか? 僕が書いたのは下記の通りです。 LOAD DATA INFILE "C:\Users\Ken\Desktop\T01Prefecture.csv" INTO TABLE T01Prefecture FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • CSVファイルを毎日、全レコード一括更新したい

    毎日、CSV形式で送られてくる最新のデータがあります。 それを自動的にMySQLに一括で追加・更新したいと考えています。 CSVファイルは毎日、データが追加されたり、UPDATEされたり、削除されたりしています。そのCSVファイルのデータを神様DBとして、上書きしたいと思っています。 つまり、前日のMySQLのデータを本日のデータで完全に上書きしたいと考えています。 単にデータをロードするだけなら mysql> load data infile "ファイルパス/ファイル名.csv" -> into table テーブル名 fields terminated by "," lines terminated by "\n"; でよいと思いますが、完全上書きの方法がよくわかりません。 それとも、上記方法で同じことを2度すると完全に上書きされるのでしょうか?同じレコードが2つ出来上がるのでしょうか?それともマージされるのでしょうか? もし、お分かりでしたらご教授ください。

    • ベストアンサー
    • MySQL
  • SQL*LOADER 最終列のLENが1

    お世話になります。 前提として 次のようなctlファイルがあります。 OPTIONS(ROWS=500,BINDSIZE=700000) LOAD DATA INFILE '/home/oracle/TEST/00_BIN/YOSAN.csv' TRUNCATE INTO TABLE MT_YOSAN ( 日付 TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 店舗コード TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 予算 TERMINATED BY ',' NULLIF 昨年実績=BLANKS, 昨年実績 NULLIF 昨年実績=BLANKS ) ロード対象のCSVですが、次のようなROWデータになります。 "2011/02/22","01010",30000,25000 テーブル仕様は次のようになっています。 日付      VARCHAR2(20) NOT NULL 店舗コード  VARCHAR2(20) NOT NULL 予算      NUMBER(10) 昨年実績   NUMBER(10) これを実行した際に昨年実績のカラムに25000の先頭の2しかロードされません。 ログファイルを開くと他のLenは*に対して最後の昨年実績列は1が設定されていました。 この事象の原因と対処法がわかる方がいればご教示いただきたく存じます。 よろしくお願いいたします。 またsqlldr実行時は引数controlとlogのみ指定しています。

  • grep 正規表現の扱い方 特定のファイル郡のみを指定するには?

    ディレクトリのファイルをgrepを使った正規表現で指定したいのですが、 /hoge/temp[001-999].php のように、hogeディレクトリにあるphpファイル全てを含め、なおかつ、 /hoge/foo/temp[001-999].php のように、hoge/fooディレクトリにあるphpファイルを全て含めない正規表現の書き方を教えてほしいです。 正規表現にあまり詳しくなく、思いつくものといっても「hoge/.*.php」くらいで、当たり前ですが双方のディレクトリが含まれてしまいます・・・。 もう一つ、質問です。 /hoge/ ディレクトリにあるファイル全てを含め、なおかつ /hoge/foo/ ディレクトリにあるファイルは全て含めない という指定の仕方も教えてほしいです。 分かる方がいましたら、お手数ですがぜひ教えてください。よろしくお願いします<(_ _)>

  • SQLローダーで複数のCSVファイルのデータを一つのテーブルにInsertしたい

    お世話になります、 以下のようにデータをSQLLDRでインサートしようと思っているのですが、複数のCSVファイルのデータを一つのテーブルにInsertしたい場合にどのようにすればいいか教えてください。 --バッチファイル sqlldr userid=fmwuser/fmwuser@fmw001 control=ctl/AUTHORITY.CTL log=section1.log data=csv/AUTHORITY.csv --CTLファイル LOAD DATA TRUNCATE INTO TABLE AUTHORITY FIELDS TERMINATED BY ',' ( AUTHORITYCODE ,AUTHORITYNAME,EXECUTIVE) CTLファイルでTRUNCATEを付けるとテーブルを初期化してからインサートするからむりですよね... TRUNCATEをはずすと、データが入っているテーブルに対してSQLLDRは使用できないと怒られるし... CSVファイルを一つにまとめるしかないのでしょうか?

  • ファイルからのデータ更新について

    表題の件について質問させていただきます。 mysqlでカンマつきのCSVファイルからデータをテーブルにインポートする際、 load data infile 'ファイルディレクトリ情報' update table テーブル名 fields terminated by ','; でインポート可能かと思います。 では、このファイルをインポートしたあとに、CSVのデータを変更して同じコマンドを使用すると、レコードが追加され、「更新」にはなりません。 ファイルからのレコード更新はどのようにすれば宜しいでしょうか? 例として下記のDB定義、インポートファイルを使用しています。 データベース定義 bang(INT) name(VARCHAR(10)) ten (INT) インポートファイル変更前 1,山本,85 2,木村,58 3,山崎,95 インポートファイル変更後 1,山本,85 2,木村,58 3,今田,95      ←name変更 何卒よろしくお願いします。

  • CSVファイルをMYSQLにインポート

    先日からMYSQL+PHPの勉強をはじめました。 データベース構築の際、以前作成したCSVファイルをMYSQLのテーブルとして 利用したいと考えております。 そこで、MYSQLコマンドより、 LOAD DATA LOCAL INFILE 'ファイル名.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'; Query OK, 0 rows affected (0.04 sec) Records: 102 Deleted: 0 Skipped: 102 Warnings: 0 とCSVファイル自体が悪いのかSQL文に問題がるのかインポートがうまくいきません。。 ちなみにCSVは  0,2011/6/2 0:00,80.94,81.32,80.55,80.92 0,2011/5/25 0:00,81.94,82.17,81.8,81.95 0,2011/5/23 0:00,81.77,82.04,81.32,81.99 環境はphpdevで一括でインストールした phpadmin: バージョン2.3.2 MYSQL: MySQL4 apache: 1.3.27 初心者で基本的な質問かもしれないですがどうかご教授お願いします。

    • ベストアンサー
    • MySQL
  • MySQLでCSV出力したい

    MySQL初心者です。 テーブルから抽出したデータを CSVにてエクスポートしたいです。 SELECT * FROM tbl_employee INTO OUTFILE "/ttt.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; これだとフィールド名がエクスポートされないという現象が起こります。 また、エクスポート先なのですが、 デスクトップとかにしたいのですが、 設定の仕方がよくわかりません。 ネットで調べたのですが、限界でした。 まだまだ初心者なもので よろしくお願いいたします

  • SQL*Loaderをダイレクトモードで実行

    するにはどうしたらいいのでしょうか? 例えば以下の場合にダイレクトモードでSQL*Loaderするにはどうしたらいいのでしょうか? sqlldr sato/secret control=x.ctl ただし x_table: create table x_table(i number,s varchar(99)); x.ctl: LOAD DATA INFILE 'x.csv' APPEND INTO TABLE x_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( i,s ) x.csv: 1,"it is iti." 2,"it is ni." 3,"it is san."