• 締切済み

ORA-00984のエラーが出ます

C#でSQL(オラクル)に接続しています。 このinsert文を実行すると「ORA-00984: ここでは列は使用できません。」がでます。 実行した文はこれです↓ "insert into kanri2 values('aaa'," + dateTimePicker1.Text + "," + checkedListBox1.CheckedItems +","+ checkedListBox6.CheckedItems +")"; よろしくお願いします

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

みんなの回答

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.1

実行されたC#の文を示されていますが、 実際にOracleに投げられたSQL文を見れば、エラー原因が分かると思います。 逆に、今示された内容ですと、変数部分の値が分からぬため、エラー原因が分かりません。 "insert into kanri2 values('aaa'," + dateTimePicker1.Text + "," + checkedListBox1.CheckedItems +","+ checkedListBox6.CheckedItems +")"; この文字列を、ログ出力するなどして、変数名が実際の値に置き換わったSQL全文を見てみることはできますでしょうか? そのSQL文をSQL*PLUSやSQL DeveloperなどのSQL実行ツールで実行しながらデバッグしていくとよいですよ。 差し当たり推測としては、変数の値が文字列値なのであれば、前後をシングルクオートで囲む必要があり、それが原因かと。恐らく、以下のような感じかな。 "insert into kanri2 values('aaa','" + dateTimePicker1.Text + "','" + checkedListBox1.CheckedItems +"','"+ checkedListBox6.CheckedItems +"')";

関連する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です、 宜しくお願い致します。

  • 複数行を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での複数行追加の良い方法がありましたら教えて頂ければ幸いです。 宜しくお願い致します。

  • ORA-06502のエラー

    以下のPL/SQLを実行すると、ORA-06502:数値または値のエラーとでます。途中までは、INSERTできるのですが、IF文の180個目くらいでエラーになります。そのあたりをCur1の宣言時にWhereで指定するとうまくいきます。 DECLARE CURSOR Cur1 IS SELECT MOJI FROM A_TBL ; CNT NUMBER(10); KAKKO_FL NUMBER(1); BEGIN CNT := 0; KAKKO_FL :=0; FOR Cur_Rec1 IN Cur1 LOOP FOR S IN 1 .. LENGTH(Cur_Rec1.MOJI) LOOP IF(ASCII(SUBSTR(Cur_Rec1.MOJI,S,1)) = 33129) THEN /*33129は'('*/ EXECUTE IMMEDIATE ' INSERT INTO EDD.test1116 VALUES( ''' || Cur_Rec1.MOJI || ''' ) '; END IF; END LOOP; END LOOP; END; なにがなんだか、さっぱりわからないので、どうか、ご教授ください。

  • INSERT文の書式

    oracleに触るの初めてなのにストアドなんて書くことに・・ 助けを頂けたらと思います。 ストアドの中でですが・・・・ INSERT文の中ではテーブルの項目が2つ以上あるとき、 変数にその2つ以上分の値を文字列として入れておいて 、その値をINSERT文に流すことってできないのでしょう か? test_str := (' ''テスト1'' , ''テスト2'' '); insert into TestTable (test1 , test2 ) values (test_str); 上記のように書くと PL/SQL: ORA-00947: 値の個数が不足しています。 とのエラーが帰ってきます。 上記のように変数を使って下記のように解釈させたいのですが無理なのでしょうか? insert into TestTable (test1 , test2 ) values ('テスト1','テスト2'); それではお願いします。 失礼いたします。

  • 副問い合わせのinsert文

    いつもお世話になっています。 insert文の副問い合わせのことでお聞きしたいのですが、 ■通常のinsert文 insert into AAA values(aaa,bbb,ccc); 上記のsqlを副問い合わせにした場合(aaaに別テーブルからの検索結果を入れたい場合)どういうSQL文になるでしょうか。 参考書等を参照すると、副問い合わせの場合はvaluesを省略する(使えない?)と記述がありました。 insert into AAA values ( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc); とはできないみたいですので… どうかご教授宜しくお願いします。

  • 無名ブロック内でのDDL実行について

    環境は Linux + oracle 10g R2です。 簡単な無名プロシージャを書いていてはまって しまいました。 分かる方でしたら、あっというまに指摘していただけそうなので こちらに質問しました。 無名ブロック内で以下の事を行いたいのですが、うまく動作を確認できません。 ※以下は意味の無い処理となっていますが、今回説明用に短くしてみました。 ◇実現したい事 1.CREATE TABLE文の実行 (ここではEX01テーブルを作成します) 2.CREATE したテーブルにたいしてINSERT 3.CREATE したテーブルのDROP ◇私の実行結果 $ sqlplus scott/tiger@orcl SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01'; レコードが選択されませんでした。 -- 私の思いでは以下のプロシージャは正常に動作するのでは? -- と思うのですが、以下の通りエラーとなってしまいます。 -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))'); 3 INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); 4 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01'); 5 END; 6 / INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); * 行3でエラーが発生しました。: ORA-06550: 行3、列13: PL/SQL: ORA-00942: 表またはビューが存在しません。 ORA-06550: 行3、列1: PL/SQL: SQL Statement ignored -- -- なので、処理を分割して行ってみました。 -- まずはCREATE TABLEのみ -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))'); 3 END; 4 / PL/SQLプロシージャが正常に完了しました。 -- -- CREATE TABLEは正常に動作したようです。 -- SQL> INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); 1行が作成されました。 -- -- INSERT文も正常に動作したようです。 -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01'); 3 END; 4 / PL/SQLプロシージャが正常に完了しました。 -- -- なんとDROP TABLEも正常に動作したようです。 -- SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01'; レコードが選択されませんでした。 SQL> そうなんです。3行まとめて記載するとエラーとなるのですが、 上記の通りそれぞれ分けて実行すると正常に動作するのです。 これはどこが悪いのでしょうか? 情けない事に、今日の午後はこれでほとんどつぶれてしまいました。 どなたか助けてください。 以上よろしくお願いします。

  • SQLの構文エラー??

    お世話になっています。 OS:Win2000 DB:Access2000 です。 Insert文、Update文共に「構文エラー」になってしまいます。 ですが、実行したSQL文をAccessのクエリに貼り付けて実行しても エラーにならず、正常に実行されます。 エラーになったSQL文は以下のとおりです。 INSERT INTO D_Schedule (ShisetuNo,YYYYMMDD,ScheTime,Seq,Title,Memo,AddDate,UpdDate) VALUES (1,20041213,'0900',6,'BBB','BBB',#2004/12/16 14:31:49#,#2004/12/16 14:31:49#) UPDATE D_Schedule Set YYYYMMDD =20041213, ScheTime ='0900', Title ='AAA', Memo ='BBB', UpdDate =#2004/12/16 14:30:06# WHERE ShisetuNo=1 AND YYYYMMDD=20041213 AND ScheTime='0900' AND Seq=2 Insert文の場合、Valueの左側を指定しないで Insert Into D_Schedule Values()だとエラーにならないです。 何かお心当たりのある方、ご指摘お願いいたします。 DB更新はADOで行っています。 ADOの接続方法は Set gobjCon = Server.CreateObject("ADODB.Connection") gobjCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & GCOM_DBNAME & ";" です。 SQL文の実行方法は gobjCon.Execute(strSQL) です。よろしくお願いいたします。

  • ORA-1036??

    突然本題ですが、 PL/SQLで条件によりINSERTかUPDATE処理を行いたいのです。 コンパイルは通りましたが、実行すると、 ORA-1036 というエラーが出ます。 マニュアルには ORA-1036:変数のname/numが無効です。 原因:ユーザー・サイドにバインド・コンテキストを見つけられません。 解決方法:バインドされている変数がSQL文に存在することを確認してください。 とあります。 insertやupdateの項目を何度もチェックしましたが、間違っていないと思います。 このエラーがでる可能性というのはどういう場合があるのか是非教えていただきたいのです。 チェックをしたものの、変数の見落としか、あるいは別の可能性があるのか知っている方がいましたら教えてもらえるとすっごく助かります。 あと、バインド・コンテキストとはなんでしょうか? 調べてみましたが、調べ方が悪いのか見つけられませんでした。

  • ora-01017エラーについて

    現在、C#とoracle10gを使ってデータベースに接続しようとしておりますが、ora-01017エラーがでます。 SQLコマンドラインで接続は出来るのですが、C#側からのログインができません。 C#ではこのように書いております。 public Meal() { InitializeComponent(); this.m_oDbconn = new OleDbConnection(); } private void Meal_Load(object sender, EventArgs e) { this.m_oDbconn.ConnectionString = "Provider=OraOLEDB.Oracle;" + "Data Sorce=xe;" + "User Id =aaa;" +"Password = aaa;"; this.m_oDbconn.Open(); } よろしくお願いします。

  • ora-01017エラーについて

    現在、C#とoracle10gを使ってデータベースに接続しようとしておりますが、ora-01017エラーがでます。 SQLコマンドラインで接続は出来るのですが、C#側からのログインができません。 C#ではこのように書いております。 public Meal() { InitializeComponent(); this.m_oDbconn = new OleDbConnection(); } private void Meal_Load(object sender, EventArgs e) { this.m_oDbconn.ConnectionString = "Provider=OraOLEDB.Oracle;" + "Data Sorce=xe;" + "User Id =aaa;" +"Password = aaa;"; this.m_oDbconn.Open(); } よろしくお願いします。