• ベストアンサー

エラーコードについて

オラクル初心者で、初めて質問します。 3点ほど、質問があります。どなたか宜しくお願いします。 (1)SELECT文発行時、抽出件数が0件(NotFound)、またはUPDATE文発行時、更新件数が0件の場合って、 エラーコードはORA-00000(正常終了)で合ってますか? (2)エラーコードのリファレンス読んでたら、ORA-00001はUpdate、もしくはInsert時に一意制約に反しているとありますが、 Insert時は分かるのですがUpdate時ってどういう条件でORA-00001が出るのでしょうか? (3)正常終了した場合も含めてエラーコードを確認することが可能なツール(フリーがBEST)とかご存知でしたら教えてください。 以上です。どうぞ宜しくお願いします。

  • Oracle
  • 回答数3
  • ありがとう数7

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

(1)SELECT文発行時、抽出件数が0件(NotFound)、またはUPDATE文発行時、更新件数が0件の場合って、 エラーコードはORA-00000(正常終了)で合ってますか? ORA-00000というのは見たことがありませんのでコメントのしようがありません。マニュアルに記載がありましたか? (2)エラーコードのリファレンス読んでたら、ORA-00001はUpdate、もしくはInsert時に一意制約に反しているとありますが、 Insert時は分かるのですがUpdate時ってどういう条件でORA-00001が出るのでしょうか? 例を示しておきます。 CREATE TABLE sample ( col varchar2(1) ); CREATE UNIQUE INDEX col_idx ON sample (col); INSERT INTO sample VALUES ('a'); INSERT INTO sample VALUES ('b'); COMMIT; UPDATE sample SET col = 'a' WHERE col = 'b'; これで col = 'a' のデータは既に存在するので一意制約違反が発生するでしょう。 (3)正常終了した場合も含めてエラーコードを確認することが可能なツール(フリーがBEST)とかご存知でしたら教えてください。 開発ツール (接続方法。ODBC、JDBC等) にもより、それを記載されていないため、回答のしようがありません。

eitigii
質問者

お礼

回答ありがとうございます。 また、質問内容が不十分であったことをお詫び致します。 (1)ORA-00000というのは見たことがありませんのでコメントのしようがありません。マニュアルに記載がありましたか? >エラーコード一覧が手元にあってそちらに記載されていましたが・・・ (2) >つまり、Keyを変更した際に一意制約違反が発生するのですね。ありがとうございます。 (3)接続方法はODBCです。

その他の回答 (2)

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.3

#2 です。 3) に関して、もしオフラインで利用できるものを探しているのでしたら 過去のバージョンですが、Oracle 9i のものが使えます。

参考URL:
http://otn.oracle.co.jp/document/products/oracle9i/920/general.html#db
eitigii
質問者

お礼

わざわざありがとうございます。 試してみます。

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

1) あっています。 DML は正常終了(ORA-00000)です。取り出し(フェッチ)をするとエラーになるはずです。 2) プライマリキーを変更すれば発生します。 3)参考 URL が役に立ちます。(無料の会員登録が必要です。) 関連する情報も一緒に表示されます。

参考URL:
http://otn.oracle.co.jp/document/msg/index.html
eitigii
質問者

お礼

1)やはり、そうですよね。ありがとうございます。 2)納得です。ありがとうございます。 3)早速、会員登録しました。すぐは見られないみたいですけど・・・ありがとうございます。

関連するQ&A

  • Visual Basic Oracleエラー

    質問します。 Visual BasicからOracle データベースに登録するときに、 エラーが発生したときにメッセージを出るようにしていますが、例えば、ORA-00000のセレクト文抽出件数がない場合、ORA-00001のinsertで既に登録があるとき、など、システムを使う人がわかりやすいようにエラーメッセージそれぞれを二つだけ変えたいと思うのですが、エラーメッセージ分岐方法がわかりません。 ex.numberとかで指定できるかと思ったのですが、できなかったので方法を教えてください。 よろしくお願いします。

  • エラー処理の方法と書き方

    csvファイルのデータをOracle 9i Databaseに格納する次のようなプログラムを作成しました。 開始 | ファイルのOPEN | DBへの接続 | 文字列から空白値の削除 | 繰り返しループ UNTIL:EOF | csvファイル中の顧客 コードがOracleテーブル 内に存在するか Yes----update No--------insert | 繰り返しループ終了 | ファイルのCLOSE | 終了 一応プログラムは正常に動作しているのを確認しました。あとはエラー処理を書いて完了だと考えています。プログラムを書いたのが初めてだったので、普通のエラー処理がどんなもんなのかちょっと想像がつかない状態です。 1.このプログラムにできるだけたくさんのケースを考えてエラー処理を書き込みたいのですが、どのようなエラーが考えられるでしょうか。 一応自分的に考えて見たのが、 (1)「開始」の前にcsvファイルがなかった場合 (2)「DB接続」の前にDB接続ができなかった場合 (3)「繰り返しループ」の前にファイルの中身が空だった場合 (4)「insert」「update」の後にSQL文の発行が全て正常に完了しなかった場合 普通はこれがいるとか、こんなのいらないとかありましたら教えてください。 2.エラーが発生した場合は、運用者にそれを伝えるために普通はコンソール上に表示させるのですか?もしそうだとしたらどのような形でそれを実現するのですか? MsgBox?メール?他には? よろしくお願いします。

  • VB6より長文INSERT文でORA1756単一引用符が閉じられていないが発生する

    初めまして。 VB6、ORACLE8iでダイナセットを使用しテーブルに対してINSERT文を 発行していますが、INSERT文が長文になると”単一引用符が閉じられていません” とエラーが返ってきます。このSQL文と同一のものをPLUSにて実行させても 同一のエラーが発生するのですが、メモ帳等で改行して一行を短くすると 正常にINSERTされます。 それならと思い、SQL文作成コード内に改行コードを挿入したのですが VB上からは同じようにエラーが返ってきます。改行コード入りのSQL文を イミディエイトより取り込みPLUSにて実行させると正常に動作します。 どうすればVB上から正常実行できるのでしょうか? 初心者ゆえどうすればよいかさっぱりわからなくなりました。 VB上からは何か制約があるのでしょうか? どなたかご存知の方ご教授願います。 長文失礼しました。

  • postgresのストアドファンクションでエラーの

    postgresのストアドファンクションでエラーの拾い方を教えてください。 insertして重複したらアップデートに切り替えるというサンプルをよく見かけます。 DECLARE BEGIN insert文 RETURN TRUE; EXCEPTION WHEN unique_violation THEN update文 END; それと同じノリで、何かしらのエラーがあった時に、 『RETURN FALSE;』するか、もしくはエラーコードをそのまま拾って返すというようなサンプルが欲しいです。 DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN FALSE; END; DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN エラーコード; END;

  • エラーコード:2738

    現在vistaを使っているのですが、『エラーコード:2738』とは何ですか? 先日、『iTunes7.3』にアップデートしようしたところ、このエラーによってできませんでした。 また、『MSNツールバー』をインストールする時もこれによってできませんでした。 ぜひ対処法を教えてください。お願いします。

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

  • PHP Mysqli関数でエラー情報を取得する

    はじめまして。 PHPから、Mysqli関数を使用して、5000件のinsert文をMySQLサーバーに投げる処理で困っています。 insert文をセミコロン;で接続して、1つのSQL文にして、executeしています。 あるinsert文でエラーが発生した場合、それ以降のSQL文が実行されずに、PHPに戻ってきてしまいます。マルチクエリの挙動としては、この動きはしょうがないのでしょうか? 5000件のうち、複数のエラー(キー重複や、外部参照キーエラー)があった場合、エラーが起きたデータについてはどのようなエラーであったかが取得でき、それ以降のデータについてはinsertが実行できると言う処理をしたいのですが、このような処理は不可能でしょうか。 ちなみにupdateの場合は、更新対象のデータがなかった場合でもエラーとはならないので5000件文の処理が行われます。 環境は、以下です。 OS:FreeBSD6 PHP:PHP5 MySQL:MySQL5.2 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ORA-1036??

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

  • カーソルエラー

    カーソルエラーについて質問です。 phpからpearを使ってoracleへ接続しています。 バッチ処理で大量にSQL文(SELECT,INSERT,UPDATE)を発行したいのですが、カーソルエラーになってしまいます。 途中の処理でエラーになった場合はロールバックしたい為最後までコミットできません。また、なるべく少ないSQL発行で済むようにプログラムを組み替え済みです。 で、少々手詰まりといった状況なのですが、コミットする以外でカーソルエラーを回避する方法はあるでしょうか? DB設計から見直さないとだめですかね…。

    • 締切済み
    • PHP
  • 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) です。よろしくお願いいたします。