プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

SQLCHECK=SEMANTICSの指定について

SQLCHECK=SEMANTICSを指定した場合、プリコンパイラでは次のものを対象とした構文およびセマンティックのチェックが行われます。

ただし、プリコンパイラでチェックするのは、リモートのデータ操作文(AT db_name句を使用する文)のみです。

プリコンパイラは、意味検査に必要な情報を、埋め込まれたDECLARE TABLE文から取得します。また、オプションUSERIDが指定されている場合は、Oracleに接続してデータ・ディクショナリにアクセスするとこの情報を取得します。データ操作文やPL/SQLブロックで参照する表がすべてDECLARE TABLE文で定義されている場合は、Oracleに接続する必要があります。

Oracleに接続してもデータ・ディクショナリで見つからない情報がある場合は、DECLARE TABLE文を使用して、欠けている情報を提供する必要があります。DECLARE TABLE文の定義とデータ・ディクショナリの定義が矛盾する場合、前者が優先されます。

データ操作文のチェックの際、プリコンパイラでは『Oracle Database SQL言語リファレンス』に記載されているOracleデータベース・バージョン7の構文規則が使用されますが、セマンティック・チェックにはさらに厳密な規則が使用されます。その結果、SQLCHECK=SEMANTICSのとき、Oracleの以前のバージョン用に作成した既存のアプリケーションを正常にプリコンパイルできない可能性があります。

新しいプログラムをプリコンパイルするときには、SQLCHECK=SEMANTICSを指定してください。ホスト・プログラムにPL/SQLブロックを埋め込む場合は、SQLCHECK=SEMANTICSを指定する必要があります

セマンティック・チェックの有効化について

SQLCHECK=SEMANTICSを指定すると、プリコンパイラではセマンティック・チェックに必要な情報を、次のいずれかの方法で取得できます。

  • Oracleに接続し、そのデータ・ディクショナリにアクセス

  • 埋込みDECLARE TABLE文を使用

Oracleへの接続について

セマンティック・チェックを行うために、プリコンパイラではホスト・プログラムで参照される表およびビューの定義が保存されているOracleデータベースに接続できます。Oracleに接続した後、プリコンパイラはデータ・ディクショナリにアクセスして必要な情報を探します。データ・ディクショナリには、表および列の名前、表および列の制約、列の長さ、列のデータ型などが格納されています。

必要な情報の一部がデータ・ディクショナリで見つからない場合(たとえば、プログラムがまだ作成されていない表を参照する場合など)、DECLARE TABLE文を使用して足りない情報を指定する必要があります。

Oracleに接続するには、次の構文を使用して、コマンドラインでUSERIDオプションを指定します。

USERID=username

usernameは有効なOracleユーザーIDです。パスワードの入力を求められます。ユーザー名のかわりに、次のように指定したとします。

USERID=/

プリコンパイラでは、このユーザーIDを使用してOracleへの接続が自動的に試みられます。

<prefix><username>

prefixにはOracle初期化パラメータOS_AUTHENT_PREFIXの値(デフォルト値はNULL)を指定し、usernameには使用しているオペレーティング・システムのユーザー名またはタスク名を指定します。

Oracleへの接続を試みて失敗した場合(たとえば、データベースが使用できない場合など)、プリコンパイラは処理を停止し、エラー・メッセージを発行します。USERIDオプションの指定を省略すると、プリコンパイラでは埋込みDECLARE TABLE文から必要な情報を取得する必要があります。

DECLARE TABLEの使用について

プリコンパイラでは、Oracleに接続しなくても、セマンティック・チェックを実行できます。チェックを実行するには、埋込みDECLARE TABLE文から表やビューに関する情報を取得する必要があります。そのため、データ操作文やPL/SQLブロックで参照する表はすべてDECLARE TABLE文で定義する必要があります。

DECLARE TABLE文の構文は次のとおりです。

EXEC SQL DECLARE table_name TABLE
 (col_name col_datatype [DEFAULT expr] [NULL|NOT NULL], ...);

exprは、CREATE TABLE文でデフォルトの列値として使用できる任意の式です。

DECLARE TABLEを使用して既存のデータベース表を定義すると、プリコンパイラではその定義を使用し、データ・ディクショナリの定義は無視します。