• ベストアンサー

Oracle 8i コンマ(,)を含むデータをinsertしたい

再度、質問させていただきます。 コンマを含むデータをinsertするにはどうしたらよいでしょうか? 例えば、次のようなテーブルを作成します。 CREATE TABLE SAMPLE (NAME VARCHAR( 15) NOT NULL, ADDRESS VARCHAR(30)); そして、 insert into sample values (Yamada, '731 Fondren,Houston,TX'); とinsertすると当然エラーになります。”ORA-00984: ここでは列は使用できません”というエラーが返ってきます。 "731 Fondren,Houston,TX"というコンマを含むアドレスをinsertしたいのですが、どうしたらよいでしょうか? set scan off をしてもダメで、 '[731 Fondren,Houston,TX]'という風に変えても、上と同じ”ORA-00984: ここでは列は使用できません”というエラーが返ってきます。グーグルで調べて、arrayof(text)という風にタイプを変えるのかなと試しましたが、だめでした。 何かアドバイスをお願いします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

insert into sample values ('Yamada', '731 Fondren,Houston,TX'); としてください。

Fireworks
質問者

お礼

成功しました。ありがとうございました。

その他の回答 (2)

回答No.3

カンマ区切りのデータでもシングルクオーテーション ' がついていれば通常問題なくinsert出来ます 今回の例で insert into sample values (Yamada, '731 Fondren,Houston,TX'); がカットアンドペーストされたものだとすると yamada が ' でくくられていないのが原因だと思います。

Fireworks
質問者

お礼

おっしゃる通りでした。char関連の型は、'でくくらないといけないのですね。ありがとうございました。

  • kots
  • ベストアンサー率18% (4/22)
回答No.1

実行する環境にもよるのですが、 PLSQLを使ってみてはどうでしょうか? 例えばこんな感じにね! declare addr := '731 Fodren,Houston TX'; begin insert into sample values('yamada',addr); commit; end; /

Fireworks
質問者

お礼

PLSQLという方法もあるのですね。参考になりました。ありがとうございました。

関連するQ&A

  • Oracle SQL*Plus Dateタイプのinsertでエラー

    date タイプを含むデータをinsert するとエラーが出ます。 たとえば、 CREATE TABLE plsql101_purchase ( product_name VARCHAR2(25), product_price NUMBER(4,2), purchase_date DATE ) ; で表を作り、 INSERT INTO plsql101_purchase VALUES ('Product Name 1', 1, '5-NOV-00'); を実行すると、 ”ORA-01858: 数値を指定する箇所に文字が指定されています” というエラーが'5-NOV-00'の下に星マークが出て表示されます。 自分のマシンに大学から渡された生徒用のOracle8iをWindows2000にインストールして教本に載っていた上のような文を実行したところ、エラーが発生しました。大学のマシンでは、うまくいきました。 何か設定するんだと思いますが、その方法がまったく分かりません。どうしたらエラーをなくすことができるでしょうか?

  • OracleのLONG型への insert について

    お世話になります。 ASP + Oracle8.0.5で開発中のシステムがあるのですが、 ASP上のテキストエリアに文章を記述して、OracleのテーブルのLONG型のカラムに対して insertを行うとエラーが起こってしまいます。 正しくは、全角で2000文字までは入力できるのですが、 それを越えてしまうと、ORA-01461エラー(LONG値はLONG列にのみバインドできます)という エラーが起こってしまい、カラムに対してinsertすることができません。 テーブルを見直してみたのですが、ちゃんとLONG型に設定してありました。 LONG型のカラムにデータを登録する際、4000バイト以上の文字列は挿入できないでしょうか? でもLONG型って、2GBまで使用できるはずでしたよね? ご教授のほど、よろしくおねがいします。

  • smalldatetime型へのInsert

    ストアド内でsmalldatetime型の項目にGetDate()関数を使用してInsertしよとしているのですが、 なぜか「STRING または BINARY データは切り詰められました。」というエラーになってしまいます。 ストアドを使用しないで直接Insert文を流すと正常に登録できます。 ちなみにInsert文はごく単純で INSERT INTO テーブル名(項目名1(varchar),項目名2(varchar),項目名3(smalldatetime)) VALUES(@変数1,@変数2,GetDate()) という感じです。 どなたか分かる方いましたら助言お願いします。

  • 日付型カラムへのデータINSERT

    お世話になります。ひとつご教授ください。 オラクル10g, ojdbc14でjdk1.4.2から接続です。 INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...); を実行するとエラーORA-01861が出ます。そこで INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...); このように記述して再度実行すると通ります。 このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか? よろしくお願いします。

  • CLOB型へのINSERT

    いつも参考にさせて頂いています。 まず、問題はCLOB型に4000Byte以上のデータを 格納出来なくて困っております。 環境は下記のとおりです。 OS:Windows2003 Oracleバージョン:9.0.1.4.0 テストした手順は (1)テーブル作成 create table TEST_TBL ( id number(9), data clob ); (2)INSERT insert into TEST_TBL values(1,'4000Byte以上のデータ'); ORA-01704: 文字列リテラルが長すぎます CLOBは4Gまで入るはずなのになぜなんでしょうか? ご回答よろしくお願いいたします。

  • JDBCを使ってdate型へのINSERTはできますか?

    JDBCを使ってOracleへ接続し、DBへデータを挿入したいのですが、 日付型のデータがどうしてもうまく挿入できません。 jsp + Servlet + Bean で開発しています。 使っているテーブルは CREATE TABLE USERS (     USERID     VARCHAR2(10) NOT NULL,     PASSWORD  VARCHAR2(10) NOT NULL,     NAME      VARCHAR2(50) NULL,     SEX       VARCHAR2(5)  NULL,     BIRTHDAY   DATE       NULL,     PRIMARY KEY (USERID, PASSWORD) ) という風な型で、定義しています。 DBへのINSERT処理は、Beanで行っています。 以下のINSERT文を実行したのですが、うまくINSERTできませんでした。 String sqlQuery = "INSERT INTO USERS (USERID, PASSWORD, NAME, SEX, BIRTHDAY)" + "VALUES ('use', 'pass', 'ナマエ', '女性', '1980/06/05')" int numOfUpdate = statement.executeUpdate(sqlQuery); ちなみに、この中のdate型で定義している「BIRTHDAY」を除いたINSERT文 String sqlQuery = "INSERT INTO USERS (USERID, PASSWORD, NAME, SEX)" + "VALUES ('use', 'pass', 'ナマエ', '女性')" int numOfUpdate = statement.executeUpdate(sqlQuery); だとうまくINSERTできます。 sql*plusを使って直に書くと、両方うまくINSERTできました。 ●その後に、「BIRTHDAY」をdate型からVARCHAR2(10)へ定義し直し、  DBを作り直して実行した所、うまくINSERTできるようになりました。 なぜ「date型」だとINSERTできず、「VARCHAR2型」だとINSERTできるのか、 知っている方がおられましたら、ぜひ教えて頂きたいです。

    • ベストアンサー
    • Java
  • 見たことのないINSERT文

    お世話になります。 他人の書いたSQLを解析して以下のようなコードを見つけました。 CREATE TABLE OYA ( ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / CREATE TABLE KO ( ID NUMBER NOT NULL, OYA_ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / INSERT INTO ( SELECT ID ,OYA_ID ,NAME FROM KO WHERE EXISTS ( SELECT ID FROM OYA WHERE NAME LIKE '%1' ) ) VALUES ( 1 ,1 ,'KODOMO-1' ); INSERT文でテーブル名を指定するかわりにSELECT文を指定しています。 SELECT INSERT文は知っていますが、このような表記は初めてです。 (文法エラーにならないのに驚きました) おそらく意図するところは、ある条件に一致したOYAが存在する場合に、KOをインサートするのだと思いました。 実際は、OYAがなくてもINSERTは実行されてしまいますが。。。 このような表記のINSERT文の説明が書いてあるサイトをご存知の方がいらっしゃいましたら、よろしくお願いします。

  • long型へのINSERTについて

    はじめましてアオツキと申します。 わたしはシステム開発を行なっていて、JAVAとOracleを使用しています。 質問させていただきたい内容は、テーブルのLONG型項目にに対してINSERT文を発行したときに起こるエラーを回避する方法です。 insert into testtable (longstr) values ('*' ×10000文字) を発行したところ「ORA-01704: 文字列リテラルが長すぎます 」 というエラーが発生しました。 このエラーを回避するため http://www.shift-the-oracle.com/oerrs/ora-01704.html 上記のURLを参考にし10000文字を分割して insert into testtable (longstr) values (TO_CLOB('*' ×3500文字) || TO_CLOB('*' ×3500文字) || TO_CLOB('*'×2000文字)) と分けてINSERT文を発行したのですが、 「ORA-22835: CLOBからCHAR、またはBLOBからRAWへの変換には、バッファーが小さすぎます(実際: 10503、最大: 4000)」 というエラーが発生しました。 このエラーについて http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19212-01/e19400.htm 上記のURLの原因と処置を呼んだのですが意味が理解できませんでした。 どなたかテーブルに長文を登録する方法をご教授いただけないでしょうか? ご回答お待ちしています。 開発環境 JAVA eclipse SQL実行 eclipseプラグイン DBViewer ORACLE 10g OJDBCドライバ ojdbc14.jar

  • oracle ファンクションの実行

    oracleでファンクションを作成しております。 このファンクションをVisualBasicより実行しているのですが、 以下のエラーが出力される状況です。 ORA-06550: 行1、列8: PLS-00553: キャラクタ・セット名が認識されません。 ORA-06550: 行0、列0: どのように対処すれば良いか分らず、 どなたか分る方がいらっしゃればご教授頂けますと 幸いです。 ★作成したファンクション CREATE OR REPLACE FUNCTION HINODE.H_HND8010U ( p_in_yoyakuid in varchar2) RETURN varchar2 --********************************************************* --* □ プロシージャ名 --* H_HND8010U --********************************************************* IS vSum varchar2(10); BEGIN vSum := p_in_yoyakuid; RETURN vSum; END; /

  • 一括でINSERTする方法(PL/SQL)

    PL/SQLを利用して、下記3つのSQLを一括でinsertしたいと思います。 (値は、任意でありません。) PL/SQLに関して、初心者なので、どのように記述してよいか 分かりません。 サンプル的なソースを用いて解説して頂けるとありがたいです。 (1)INSERT INTO tb1(列1, 列2) VALUES('値1','値2') (2)INSERT INTO tb1(列1, 列2) VALUES('値3','値4') (3)INSERT INTO tb1(列1, 列2) VALUES('値5','値6')