ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 付録A
エラー・メッセージ

この付録の内容は、次のとおりです。

- SQLの使用時に表示されるエラー・メッセージの種類および形式

- エラー・メッセージのドキュメントの検索方法および使用方法

# A.1 エラー・メッセージの種類および形式

メッセージは、SQLのみでなく、基底ソフトウェアからも表示される場合があります。

SQLの使用時に表示されるメッセージは、次のレベルから生成されます。

- SQLインタフェース自体。SQLで生成されるメッセージの先頭には、機能コードSQLが付きます。次に例を示します。

      %SQL-E-CURALROPE, Cursor K was already open

  プログラムでは、付録C.2節に示すように、SQL_SIGNALルーチン、SQL_GET_ERROR_TEXTルーチン、SQL_GET_MESSAGE_VECTORルーチンおよびSQL$GET_ERROR_TEXTルーチンでメッセージ・ベクター構造体を使用して、エラーのシグナルを発行したり、対応するメッセージ・テキストを返すことができます。

- 共通オペレーティング・システム・インタフェース（COSI）の機能エラー・メッセージ。次に例を示します。

      %COSI-F-NOQUAL, qualifiers not allowed - supply only verb and parameters

- 基底データベース製品。基底データベースから生成されるメッセージの機能コードは、SQLを使用しているデータベース製品によって異なります。
  Oracle Rdbメッセージの先頭には、機能コードRDMSが付きます。次に例を示します。

      %RDMS-F-INVDB_NAME, invalid database name

  他の製品については、該当するドキュメントを参照してください。

- リポジトリ。リポジトリで生成されるメッセージの先頭には、機能コードCDDが付きます。次に例を示します。

      %CDD-E-ERRSHOW, error displaying object

エラー・メッセージの生成元とは無関係に、メッセージの形式は同じです。すべてのエラー・メッセージには、次の要素が含まれます。

- 機能名: パーセント記号（%）またはハイフン（-）の後

- 重大度コード: ハイフン（-）の前
  表A-1には、重大度コードが重大度の低い順に示されています。

- 診断エラー・メッセージ名: カンマ（,）の前
  メッセージの識別名です。エラー・メッセージのドキュメントでは、メッセージは、機能ごとに診断エラー・メッセージ名のアルファベット順に記載されています。

- 診断エラー・メッセージ・テキスト
  問題の簡単な説明テキストです。エラー・メッセージには、ユーザーのエラーに固有の置換文字列が含まれる場合があります。エラー・メッセージのドキュメントでは、これらの置換文字列は、メッセージ内で山カッコ（< >）で区切られています。次に例を示します。

      %SQL-F-CURNOTOPE, Cursor <str> is not opened

  このメッセージの表示では、<str>は実際の文字列（この例ではカーソル名）に置き換えられます。

エラー・メッセージの一部またはすべての要素の表示は、DCLでSET MESSAGEコマンドを使用して抑制できます。

表A-1 エラー・メッセージの重大度コードの説明
コード | 重大度 | 説明
--- | --- | ---
S | 成功 | コマンドが正常に実行されたことを示す。
I | 情報 | ソフトウェアによって行われた処理を報告する。
W | 警告 | エラー状態を示すが、是正処置が不要な場合もある。
E | エラー | 致命的ではないが、処置または修正が必要な状態を示す。
F | 致命的 | 致命的であり、処置または修正が必要な状態を示す。

# A.2 エラー・メッセージのドキュメント

エラー・メッセージは頻繁に更新されるため、ドキュメントは次のテキスト・ファイルで提供されます。

- SQLメッセージ:
  SYS$HELP:SQL$MSGnn.DOC内
  nnはOracle Rdbの現在のバージョン番号。
  このファイルには、対話型SQLのエラーに関するヘルプ・トピックと同じテキストが含まれています。

- RDBメッセージ:
  SYS$HELP:RDB_MSGnn.DOC内
  nnはOracle Rdbの現在のバージョン番号。

- RDMSメッセージ:
  SYS$HELP:RDMS_MSG.DOC内

- COSIメッセージ:
  SYS$HELP:COSI_MSG.DOC内

- SQL/Servicesメッセージ:
  SYS$HELP:SQLSRV$MSG.DOC内

- リポジトリ・メッセージ:
  SYS$HELP:CDD_MSG.DOC内

メッセージのドキュメントは、すべての機能に関して同じ形式であり、メッセージはメッセージ名のアルファベット順に記載されています。メッセージ名とテキストの後には、その説明と、推奨されるユーザー処理が記載されています。

メッセージ・ドキュメントのオンライン・ファイルは、新規バージョンのSQLをインストールしなくても更新される場合があります。特に、Oracle Rdbデータベースのインストールでは、RDB_MSG.DOCファイルが最新のファイルに置き換えられる場合があります。

メッセージ・ドキュメントのオンライン・ファイルは、印刷して参照できます。また、必要なメッセージ情報をファイルで検索することもできます。

# A.3 SQL文の使用時に生成されるエラー

SQLを使用するアプリケーション・プログラムを記述するときは、次のいずれかの方法でエラー・メッセージを返す必要があります。

- SQLCODEパラメータ: SQL文の実行ステータスを表す値を格納します。

- SQLSTATEステータス・パラメータ: 5文字の文字列で、ANSI/ISO SQL規格に準拠したエラー処理を行います。SQLSTATEステータス・パラメータの詳細は、付録Cを参照してください。

- ロングワード配列RDB$MESSAGE_VECTOR: SQL文の実行ステータスに関する情報を格納します。

- コールsql_signal、sql_get_error_textおよびSQL$GET_ERROR_TEXT: RDB$MESSAGE_VECTOR配列で返されたエラー情報を使用します。

- コールsql_get_message_vector: 最後のSQL文のステータスに関する情報をメッセージ・ベクターから取得します。

- SQL文WHENEVER: WHENEVER文の後のすべてのSQL文のエラー処理を行います。（ただし、この文は、SQLモジュール内のプロシージャをコールするプログラムでは使用できません。）

SQLオプションを使用したエラー処理の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

表A-2に、SQL文と、SQL文によって実行時に通常生成されるエラーを示します。これは完全なリストではありません。2列目にはエラー・メッセージのステータス・コードが、3列目にはSQLCAのSQLCODEフィールドの対応する値が示されています。SQLCODE値の詳細は、付録Cを参照してください。

表A-2 実行時に生成されるSQLエラー
SQL文 | エラーのステータス・コード2 | SQLCODE値
--- | --- | ---
ALTER DOMAIN | SQL$_BAD_LENGTH | --1029
| SQL$_BAD_SCALE | --1030
| SQL$_NO_SUCH_FIELD | --1027
ALTER TABLE | RDB$_DEADLOCK | --913
| RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
| RDB$_NO_PRIV | --1028
| RDB$_READ_ONLY_REL | --1031
| RDB$_READ_ONLY_TRANS | --817
| RDB$_READ_ONLY_VIEW | --1031
| RDB$_REQ_NO_TRANS | なし1
| SQL$_BAD_LENGTH | --1029
| SQL$_BAD_SCALE | --1030
| SQL$_COLEXISTS | --1023
| SQL$_FLDNOTDEF | --1024
| SQL$_FLDNOTINREL | --1024
| SQL$_NO_SUCH_FIELD | --1027
ATTACH | RDB$_REQ_WRONG_DB | --1020
CLOSE | SQL$_CURNOTOPE | --501
COMMIT | RDB$_DEADLOCK | --913
| RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
| SQL$_NO_TXNOUT | --1005
CREATE DOMAIN | SQL$_FIELD_EXISTS | --1026
CREATE VIEW | RDB$_DEADLOCK | --913
| RDB$_LOCK_CONFLICT | --1003
| SQL$_NO_SUCH_FIELD | --1027
| SQL$_REL_EXISTS | --1025
DELETE | RDB$_DEADLOCK | --913
| RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
DELETE...WHERE | RDB$_DEADLOCK | --913
CURRENT OF... | RDB$_INTEG_FAIL | --1001
| SQL$_CURNOTOPE | --501
| SQL$_FETNOTDON | --508
FETCH | RDB$_DEADLOCK | --913
| RDB$_LOCK_CONFLICT | --1003
| RDB$_STREAM_EOF | 100
| SQL$_CURNOTOPE | --501
| SQL$_NULLNOIND | --305
INSERT | RDB$_ARITH_EXCEPT | --304
| RDB$_DEADLOCK | --913
| RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
| RDB$_NO_DUP | --803
| RDB$_NO_PRIV | --1028
| RDB$_NOT_VALID | --1002
| RDB$_OBSOLETE_METADATA | --1032
| RDB$_READ_ONLY_REL | --1031
| RDB$_READ_ONLY_TRANS | --817
| RDB$_READ_ONLY_VIEW | --1031
| RDB$_REQ_NO_TRANS | なし1
| RDB$_REQ_WRONG_DB | --1020
| RDB$_UNRES_REL | --1033
OPEN | RDB$_DEADLOCK | --913
| RDB$_LOCK_CONFLICT | --1003
ROLLBACK | SQL$_NO_TXNOUT | --1005
SET TRANSACTION | RDB$_DEADLOCK | --913
| RDB$_LOCK_CONFLICT | --1003
| SQL$_BAD_TXN_STATE | --1004
シングルトンSELECT | RDB$_DEADLOCK | --913
| RDB$_LOCK_CONFLICT | --1003
| SQL$_NULLNOIND | --305
| SQL$_SELMORVAL | --811
UPDATE | RDB$_DEADLOCK | --913
| RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
| RDB$_NO_DUP | --803
| RDB$_NOT_VALID | --1002
| RDB$_READ_ONLY_REL | --1031
UPDATE...WHERE | RDB$_DEADLOCK | --913
CURRENT OF... | RDB$_INTEG_FAIL | --1001
| RDB$_LOCK_CONFLICT | --1003
| RDB$_NO_DUP | --803
| RDB$_NOT_VALID | --1002
| SQL$_CURNOTOPE | --501
| SQL$_FETNOTDON | --508

1数値は不定です。SQLCODEで負の値をチェックします。
2-1は、どの特定のエラーにも該当しない一般エラーSQLCODE値です。意味のあるエラーを返すには、sql_signalまたはsql_get_error_textを使用します。

# A.4 プリコンパイラおよびモジュール言語のエラーの識別

SQLプリコンパイラおよびSQLモジュール言語プロセッサでは、ANSI/ISO SQL規格に準拠していない構文の識別（フラグ付け）が可能です。詳細は、第3章および第4章を参照してください。

SQLプリコンパイラおよびSQLモジュール言語のエラー・メッセージには、次のようにフラグが付けられます。

    EXEC SQL SELECT SUM(DISTINCT QTY), AVG(DISTINCT QTY)    /* multiple distincts*/
    %SQL-I-NONSTADIS, (1) The standard only permits one DISTINCT in a select expression
        INTO :int1, :int2 FROM D.SP;            /*    in a query     */