• ベストアンサー

複数行をINSERTで『ORA-00911: 文字が無効です。』というエラーが出てしまいます。

SQL初心者です。 CommonSQLEnvironmentを使用して複数行のデータを登録したいのですが、 ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); ****************************************** この状態で実行すると、『ORA-00911: 文字が無効です。』と出ます。 セミコロン(;)を抜いて ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') ****************************************** を実行すると『ORA-00933: SQLコマンドが正しく終了されていません。』と出ます。 ちなみに1行のみ実行で ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') ****************************************** は成功します。 また、 ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'), ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); ****************************************** というものも試してみましたが駄目でした。 CommonSQLEnvironmentでの複数行追加の良い方法がありましたら教えて頂ければ幸いです。 宜しくお願い致します。

  • Oracle
  • 回答数2
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.1

このツールは使ったことがなかったのですが、こんな感じで出来そうです。 1.テキストエディタを開いて各INSERT文(末尾にセミコロンあり)を書いて、ファイル名を   data.sql(名前は適当)として保存します。 ==== data.sqlの内容 ==== INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); ======================== 2.Common SQL Environmentで「データベース」→「SQLスクリプト実行」を選び、   上記で作成した「data.sql」を選択する(画面下のボタンでも可) 3.コミットする。

panat3
質問者

お礼

教えていただいた方法で成功しました!ありがとうございます。 また、そのときに出たメッセージから、根本的な問題解決にも繋がりました。 一括実行をしていない事が問題だったみたいです。 その後、直接スクリプトをCommon SQL Environmentに書き込んだ状態で、「一括実行」を行ったら成功しました。 やはり初歩的な問題だったようです;;; ありがとうございました!

その他の回答 (1)

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.2

おそらくWindowsで実行されていると思いますが、以下の各点をご確認下さい。 ・日本語文字を使わなければ、挿入が成功しますか ・SQL文の文字コードは何ですか ・SQL文の文字コードに合わせて、CommonSQLEnvironmentを実行されているマシンの環境変数NLS_LANGを適切に設定されていますか

panat3
質問者

お礼

問題解決しました。今回の問題は文字コードとは関係なかったようですが、文字コードの問題で上手くいかない場合もあるんですね。 参考になります。 ありがとうございました。

関連するQ&A

  • ora-01722のエラーについて

    あるテーブル「ABC」の定義が CHAR(5), VARCHAR2(10), VARCHAR2(20), NUMBER(5,2) だったとします、 そこへINSERT文で INSERT INTO ABC VALUES ('A1111', 'B222222', 'C33333333', '0') を実行すると、 「ORA-01722: 数値が無効です。」 のエラーとなってしまいます、 形式的には合っているように思えるのですが、 どういった問題が考えられるでしょうか? ORACLEバージョンは9.2です、 宜しくお願い致します。

  • SQLのto_char関数の未定義エラー

    1、to_char関数は、insertのinto内でも使えますか? 2、oracle、access2010で insert table into (to_char(sysdate, 'yymmdd'), ......); と実行しましたが、「未定義の関数to_charがあります」と出てしまいます… 解決方法について、教えてください。 よろしくお願いします。

  • 複雑なクエリ

    最近の連続失敗回数が3回の登録番号を求めるクエリがわかりません。 教えてください。 DBは、MySQL version: 4.0.22で、副問合せ等は使用できません。 create table t_test( n_no integer,-- 登録番号 n_flg integer,-- 0:成功1:失敗 d_update date-- 更新日付 ); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-01'); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-02'); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-01'); insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-02'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-06'); insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-07');

    • ベストアンサー
    • MySQL
  • 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" よろしくお願いします。

  • Oracle10.2.0.4 のDATE型へのインサートについて

    Oracle10.2.0.4 のDATE型へのインサートについて 例えば INSERT INTO テーブル名(DATE型の項目) values(TO_DATE('20100819','YYYYMMDD')) で追加した場合、時刻は何時で入るのですか? ご存知の方、教えて下さい! 宜しくお願い致します

  • SQL/Loaderでの年月日時分秒のセットに関して

    こんにちは、よろしくお願いします。 Oracle10gのテーブルの日付型の[SYSTRK_DT」フィールドに、 SQL/Loaderにて、ロードした当日の年月日時分秒をセットする文を 書いておりますが、以下の分で年月日はセットできたのですが、 時分秒までセットする方法をご存知の方いらっしゃいますでしょうか? このような感じにしたいです→[20060105111353] できれば24時間表記が良いのですが。。 よろしくお願いします。 LOAD DATA APPEND INTO TABLE TEST_MST ( ~~ SYSTRK_DT "TO_CHAR(SYSDATE,'yyyymmdd')" ~~ )

  • オラクル10で、perlのプレースフォルダーで日付型のデータを入れようとしていますがどのようにすればよいのでしょうか

    オラクル10で、perlのプレースフォルダーで日付型のデータを入れようとしていますがどのようにすればよいのでしょうか? オラクルのSYSDATE値と名前をインサートしたいのですが 以下の、[]の2つの部分がかわりません。 REGはDATE型です。 [オラクルのSYSDATE値の取得する] my $datetime = [オラクルのSYSDATE値をセットする]; my $sql = qq{insert into TEST (REG, NAMAE) VALUES (?, ?)}; my $sth = $dbh1->prepare( $sql ); $sth->bind_param(1, $datetime ); $sth->bind_param(2, "山田" ); $sth->execute(); よろしくお願いいたします。

  • mysqlにinsertするとエラーがでますが、直せません。

    insert into cb001 (rec_ymd,update_ymd,update_content,scan_ymd,rig_wro,bukken_rank,loc_genru,loc_category,post_no,address_a,address_b,address_c, buil_nm,floor_num,pay_select,parking,usage,station,on_off,route,heavy,light,mono,office,note,structure,tsubo,rent,tsubo_rent,public, security,front,contract,condition,population,app,into,owner,contact) values("'.$_POST['rec_ymd'].'","'.$_POST['update_ymd'].'","'.$_POST['update_content'].'","'.$_POST['scan_ymd'].'", "'.$_POST['rig_wro'].'","'.$_POST['bukken_rank'].'","'.$_POST['loc_genru'].'","'.$_POST['loc_category'].'","'.$_POST['post_no'].'","'.$_POST['address_a'].'","'.$_POST['address_b'].'", "'.$_POST['address_c'].'","'.$_POST['buil_nm'].'","'.$_POST['floor_num'].'","'.$_POST['pay_select'].'","'.$_POST['parking'].'", "'.$_POST['usage'].'","'.$_POST['station'].'","'.$_POST['on_off'].'","'.$_POST['route'].'","'.$_POST['heavy'].'","'.$_POST['light'].'","'.$_POST['mono'].'", "'.$_POST['office'].'","'.$_POST['note'].'","'.$_POST['structure'].'","'.$_POST['tsubo'].'","'.$_POST['rent'].'","'.$_POST['tsubo_rent'].'","'.$_POST['public'].'", "'.$_POST['security'].'","'.$_POST['front'].'","'.$_POST['contract'].'","'.$_POST['condition'].'","'.$_POST['population'].'", "'.$_POST['app'].'","'.$_POST['into'].'","'.$_POST['owner'].'","'.$_POST['contact'].'") 【エラー内容】 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'usage,station,on_off,route,heavy,light,mono,office,note,structure,tsubo,rent,tsu' at line 3 何がおかしいんでしょうか?何度見ても分かりません。 以上の情報以外の部分なのでしょうか? MySQL 5.1.33 です。

    • ベストアンサー
    • PHP
  • PHP+MYSQL IF文の初歩

    全く初歩の質問で申し訳ございません。 create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40)); insert into test values('りんご',300,200,'黒字'); insert into test values('みかん',500,300,null); insert into test values('ぶどう',null,null,'未入荷'); で 「みかん」のレコードが、uri > kai なら 「みかん」のurikaiを'黒字'にする方法を IF文でどのように書けばよいのかを教えてください。

    • ベストアンサー
    • PHP
  • 時間の抽出条件

    業務で開発中、どうしてもわからなかったので質問させていただきます。 あるテーブルから「データを抽出する日の14時までにできたデータのみを抽出する」というSQLですが、 データを抽出する日→SYSDATEでYYYYMMDDまでを取得する考えです。 このあとの14:00:00という条件をつけるSQLの書き方がわかりません。 このような書き方ではだめでしょうか? SELECT * FROM T_TEST WHERE DATAYMD < TO_CHAR(SYSDATE '14:00:00','YYYYMMDD HH24:MI:SS'); DATAYMDはCHAR型で8バイトで入っています。 よろしくお願いいたします。