ヘッダーをスキップ

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

戻る | 次へ |

例4: SET文を使用した、ANSI/ISO SQL規格またはMIA規格のへ拡張機能を含む構文に関するメッセージの表示

この例は、最初にSQL92_ENTRYに対して、次にMIAに対してフラグ設定をオンにしたときの出力を示しています。

    SQL> -- Flagging is off by default. When you enter a statement that
    SQL> -- uses the data type VARCHAR, SQL does not issue a message.
    SQL> --
    SQL> SHOW FLAGGER MODE;
    The flagger mode is OFF
    SQL> CREATE TABLE TEST1 (TEXT_COL VARCHAR (100));
    SQL> --
    SQL> -- When you set the flagger to SQL92_ENTRY, SQL generates an
    SQL> -- error message because VARCHAR is an extension to the standard.
    SQL> --
    SQL> SET FLAGGER SQL92_ENTRY ON
    SQL> CREATE TABLE TEST2 (TEXT_COL VARCHAR (100));
    %SQL-I-NONSTADTP, Nonstandard data type
    SQL> --
    SQL> -- With the flagger set to SQL92_ENTRY, SQL does not generate an
    SQL> -- error message for the data type CHAR because it is an ANSI/ISO
    SQL> -- standard data type.
    SQL> --
    SQL> CREATE TABLE TEST3 (TEXT_COL CHAR);
    SQL> --
    SQL> -- However, when you set the flagger to MIA, SQL generates two
    SQL> -- error messages because data definition is not part of the MIA
    SQL> -- standard. The first error message is caused by the CREATE
    SQL> -- keyword; the second is caused by trying to create a table.
    SQL> --
    SQL> -- (Note that the SET FLAGGER statement itself is nonstandard.)
    SQL> --
    SQL> SET FLAGGER MIA ON
    %SQL-I-NONSTASYN, Nonstandard syntax
    SQL> CREATE TABLE TEST3 (TEXT_COL CHAR);
    %SQL-I-NONSTASYN, Nonstandard syntax
    %SQL-I-NONSTASYN, Nonstandard syntax
    SQL>

例5: SET文を使用した、廃止された構文のチェック

この例は、ユーザーがWARNING DEPRECATEを指定した場合とWARNING NODEPRECATEを指定した場合の廃止されたSQL文による出力を示しています。

    SQL> --
    SQL> -- By default, SQL sends warning messages when you use obsolete syntax.
    SQL> --
    SQL> DECLARE SCHEMA FILENAME personnel;
    %SQL-I-DEPR_FEATURE, Deprecated Feature: SCHEMA (meaning ALIAS)
    SQL> DISCONNECT ALL;
    SQL> --
    SQL> -- When you specify SET WARNING NODEPRECATE, SQL does not display warning
    SQL> -- messages.
    SQL> --
    SQL> SET WARNING NODEPRECATE;
    SQL> DECLARE SCHEMA FILENAME personnel;
    SQL> DISCONNECT ALL;

例6: ページの長さの設定

次の例では、SET PAGE LENGTHコマンドを使用してHELPのページ区切りの長さを変更します。

    SQL> set page length 40;
    SQL> show display
    Output of the query header is enabled
    Output of the row counter is enabled
    Output using edit strings is enabled
    Page length is set to 40 lines
    Line length is set to 80 bytes
    Display NULL values using "NULL"

# SET ALIAS文

> 動的に準備および実行されるSQLユーザー・セッションまたは対話型SQLのデフォルトの別名を指定します。この別名は、新たなSET ALIAS文を発行するまで使用されます。別名を指定しない場合、デフォルトはRDB$DBHANDLEです。

## 環境

> SET ALIAS文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### alias-parameter

> デフォルトの別名を指定する、プリコンパイルされたSQLのホスト言語変数またはSQLモジュール言語プロシージャの仮パラメータを指定します。

> ### alias-parameter-marker

> 動的SQL文でパラメータ・マーカー（?）を指定します。別名のパラメータ・マーカーは、デフォルトの別名を指定するパラメータを参照します。

> ### alias-string-literal

> デフォルトの別名を指定する文字列リテラルを指定します。別名の文字列リテラルは、一重引用符で囲む必要があります。

## 使用方法

> - SQLでは、2レベルの名前を次の方法で解釈します。

>   1. SQLではピリオド（.）の左にある名前をチェックし、それが別名であるかどうかを判断します。別名と判断すると、その名前を次のように解釈します。

>          alias-name.table-name

>   2. この名前に別名がない場合、2レベルの名前を次のように解釈します。

>          schema-name.table-name

## 例

> 例1: オブジェクト名の修飾を回避するためのデフォルトの別名の設定

>     SQL> ATTACH 'ALIAS CORP FILENAME corporate_data';
>     SQL> SET CATALOG 'ADMINISTRATION';
>     SQL> SET SCHEMA 'PERSONNEL';
>     SQL> SELECT LAST_NAME FROM EMPLOYEES;
>     %SQL-F-NODEFDB, There is no default database
>     SQL> --
>     SQL> -- You must qualify the table name because you attached with an alias.
>     SQL> --
>     SQL> SELECT LAST_NAME FROM CORP.EMPLOYEES;
>      LAST_NAME
>      Ames
>      Andriola
>      Babbin
>        .
>        .
>        .
>     100 rows selected
>     SQL> SET ALIAS 'CORP';
>     SQL> --
>     SQL> -- Now you do not need to qualify the table name EMPLOYEES.
>     SQL> --
>     SQL> SELECT LAST_NAME FROM EMPLOYEES;
>      LAST_NAME
>      Ames
>      Andriola
>      Babbin
>        .
>        .
>        .
>     100 rows selected

> 例2: デフォルトの別名の変更

> SHOW DATABASE文を使用してデータベース設定を表示します。

>     SQL> ATTACH 'FILENAME personnel';
>     SQL> ATTACH 'ALIAS corp FILENAME corporate_data';
>     SQL> --
>     SQL> -- The default alias, RDB$DBHANDLE, refers to PERSONNEL
>     SQL> -- to simplify references to CORPORATE_DATA make this
>     SQL> -- database the default alias
>     SQL> --
>     SQL> SET ALIAS 'CORP';
>        .
>        .
>        .

# SET ALL CONSTRAINTS文

> コミット時に評価される制約のチェックを制御します。（この文は、動詞実行時の制約の評価には影響しません。動詞実行時の評価の詳細は、「SET TRANSACTION文」を参照してください。SET ALL CONSTRAINTS文は、トランザクションをコミットする前の遅延可能制約の定期的な評価に使用されます。

## 環境

> SET ALL CONSTRAINTS文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### DEFAULT

> 次のいずれかを使用して指定した場合を除き、セッションのデフォルトの制約モードはDEFERREDに設定されます。

> - SET DEFAULT CONSTRAINT MODE IMMEDIATE文

> - SQLプリコンパイラ・コマンドラインのSQLOPTIONS=(CONSTRAINTS=IMMEDIATE)修飾子

> - SQLモジュール言語コマンドラインのCONSTRAINTS=IMMEDIATE修飾子

> ### DEFERRED

> ### OFF

> このオプションを指定すると、制約の評価はトランザクション完了のコミット時まで遅延されます。OFFは、DEFERREDと同義です。

> ### IMMEDIATE

> ### ON

> このオプションを指定すると、制約の評価は文の完了時にただちに実行されます。ONは、IMMEDIATEと同義です。

> SET ALL CONSTRAINTS IMMEDIATE文を発行すると、SQLでは次のように処理されます。

> - すべての事前遅延制約を評価します（本来、これらの制約はCOMMIT文で評価されます）。

> - SQL文の最後に、SQL文の実行ごとの遅延評価に選択されている制約を（COMMIT文まで待機せずに）SQLで評価するモードに設定します。

> トランザクションが完了すると、制約モードは後続文のためにデフォルトの制約モードに戻ります。

## 使用方法

> - SET ALL CONSTRAINTS文の実行時に宣言済のトランザクションがアクティブでない場合、その宣言済のトランザクションが開始されます。

> - SQLプリコンパイラ・コマンドラインのSQLOPTIONS=(CONSTRAINTS=ON|OFF)修飾子の詳細は、第4章を参照してください。SQLモジュール言語コマンドラインのCONSTRAINTS修飾子の詳細は、第3章を参照してください。

> - 動詞実行時の制約の評価を必要とする場合は、SQL SET TRANSACTION文でEVALUATING句を使用します。SET ALL CONSTRAINTS文は、遅延可能（コミット時）制約の評価時にのみ適用されます。VERB TIME句の詳細は、「SET TRANSACTION文」を参照してください。

> - この文は、NOT DEFERRABLE制約には影響しません。

> - 制約評価時間の制御のガイドラインについては、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

> - SET ALL CONSTRAINTS ON文はSET ALL CONSTRAINTS IMMEDIATE文に相当し、SET ALL CONSTRAINTS OFF文はSET ALL CONSTRAINTS DEFERRED文に相当します。ONおよびOFFのキーワードはANSI/ISO 1989 SQL規格に準拠しています。IMMEDIATEおよびDEFERREDは、後期のANSI/ISO SQL規格に準拠しています。

## 例

> 例1: 対話型SQLでのSET ALL CONSTRAINTS文の使用

>     SQL> att 'file mf_personnel_sql';
>     SQL> set all constraints immediate;
>     SQL> show constraint;
>         Statement constraint evaluation default is DEFERRED (off)
>         Statement constraint evaluation is IMMEDIATE (on)
>     SQL> /*
>     ***> Show the constraints
>     ***> */
>     SQL> show tables (constraints) job_history;
>     Information for table JOB_HISTORY

>     Table constraints for JOB_HISTORY:
>     JOB_HISTORY_FOREIGN1
>      Foreign Key constraint
>      Column constraint for JOB_HISTORY.EMPLOYEE_ID
>      Evaluated on COMMIT
>      Source:
>      JOB_HISTORY.EMPLOYEE_ID REFERENCES EMPLOYEES (EMPLOYEE_ID)

>     JOB_HISTORY_FOREIGN2
>      Foreign Key constraint
>      Column constraint for JOB_HISTORY.JOB_CODE
>      Evaluated on COMMIT
>      Source:
>      JOB_HISTORY.JOB_CODE REFERENCES JOBS (JOB_CODE)

>     JOB_HISTORY_FOREIGN3
>      Foreign Key constraint
>      Column constraint for JOB_HISTORY.DEPARTMENT_CODE
>      Evaluated on COMMIT
>      Source:
>      JOB_HISTORY.DEPARTMENT_CODE REFERENCES DEPARTMENTS (DEPARTMENT_CODE)

>     Constraints referencing table JOB_HISTORY:
>     No constraints found

>     SQL> set all constraints deferred;
>     SQL> show constraint;
>     Statement constraint evaluation default is DEFERRED (off)
>     Statement constraint evaluation is DEFERRED (off)
>     SQL>

# SET ANSI文

> 特定のインスタンスのSQLの動作をANSI/ISO SQL規格に準拠させるかどうかを指定します。これらのインスタンスの現在のデフォルト動作は非準拠です。

> 注意 SQLでは、SET ANSI文の後継となる次の新しい文が提供されています。 SET ANSI DATEはSET DEFAULT DATE FORMATに置き換えられます。詳細は、「SET DEFAULT DATE FORMAT文」を参照してください。 SET ANSI IDENTIFIERSはSET KEYWORD RULESに置き換えられます。詳細は、「SET KEYWORD RULES文」を参照してください。 SET ANSI QUOTINGはSET QUOTING RULESに置き換えられます。詳細は、「SET QUOTING RULES文」を参照してください。 SET VIEW UPDATE RULESは新規の文です。詳細は、「SET VIEW UPDATE RULES文」を参照してください。 さらに、SQLで提供されるSET DIALECT文を使用すると、これらのすべての文の設定を1つの文で指定できます。詳細は、「SET DIALECT文」を参照してください。 SET ANSI文を使用した場合、廃止予定の機能に関するメッセージは表示されません。

## 環境

> SET ANSI文は、対話型SQLでのみ使用できます。

## 形式

## 引数

> ### DATE ON

> ### DATE OFF

> DATEデータ型およびCURRENT_TIMESTAMPファンクションのデータ型の列に対するデフォルトの解釈を指定します。

> DATEデータ型およびCURRENT_TIMESTAMPデータ型は、VMS ADTまたはANSIのどちらでもかまいません。デフォルトでは、どちらのデータ型もDATE VMSと解釈されます。VMS形式には、TIMESTAMPと同様にYEAR TO SECONDフィールドが含まれています。

> SET DEFAULT DATE FORMAT文、プログラムに埋め込まれているDECLARE MODULE文のプリコンパイラDEFAULT DATE FORMAT句、またはモジュール・ファイルのモジュール言語DEFAULT DATE FORMAT句を使用すると、DATEおよびCURRENT_TIMESTAMPをANSI形式に変更できます。ANSI形式のDATEには、YEAR TO DAYフィールドのみが含まれます。

> ドメインまたは表を作成する前に、SET DEFAULT DATE FORMAT文を使用する必要があります。列または表を作成した後は、この文はデータ型の変更に使用できません。

> ### IDENTIFIERS ON

> ### IDENTIFIERS OFF

> 予約語を識別子として使用する文をSQLでチェックするかどうかを指定します。SET ANSI IDENTIFIERS ONを指定すると、SQLではANSI/ISO規格に基づいて文の予約語をチェックします。予約語をSQL文の識別子として指定するには、これらを二重引用符で予約語を囲む必要があります。囲んでいない場合、予約語チェックを有効にすると、SQLでは該当する文の実行後に情報メッセージを発行します。廃止予定の識別子としての予約語のリストは、付録F.4節を参照してください。

> SET ANSI IDENTIFIERS OFFを指定すると、識別子はチェックされません。デフォルトでは、SQLでは識別子をチェックしません。

> ### QUOTING ON

> ### QUOTING OFF

> 二重引用符を使用して、後続の文で別名とカタログ名のペアを区切ることができます。SQL構文のデフォルトでは、一重引用符のみを使用できます。ANSI/ISO SQL規格のネーミング規則に準拠するには、ANSI QUOTINGをオンにする必要があります。マルチスキーマ・データベースのネーミングを使用するには、ANSI QUOTINGをオンに設定してください。

## 例

> 例1: CURRENT_TIMESTAMPのANSI形式への設定

> デフォルトではCURRENT_TIMESTAMPはADTデータ型であり、TIMESTAMPはANSIデータ型であるため、次の例ではSQLはエラー・メッセージを発行します。SET ANSI DATE ON文により、デフォルトのCURRENT_TIMESTAMPがANSI形式に変更されます。

>     SQL> begin
>     cont> declare :logging_date timestamp;
>     cont> set :logging_date = current_timestamp;
>     cont> trace :logging_date;
>     cont> end;
>     %SQL-F-UNSDATASS, Unsupported date/time assignment from <Source> to LOGGING_DATE
>     SQL> SET ANSI DATE ON;
>     SQL> begin
>     cont> declare :logging_date timestamp;
>     cont> set :logging_date = current_timestamp;
>     cont> trace :logging_date;
>     cont> end;

> 例2: SET ANSI IDENTIFIERS文を使用した予約語のチェック

> この例は、ドメインを作成し、そのドメインのユーザー指定の名前としてANSI89の予約語CONTINUEを指定するSQL文の出力を示しています。SET ANSI IDENTIFIERS ON文では、この名前に大文字を使用し、二重引用符で名前を囲むよう求められます。

>     SQL> set ansi identifiers on;
>     SQL> create domain continue char(5);
>     %SQL-F-RES_WORD_AS_IDE, Keyword CONTINUE used as an identifier
>     SQL> create domain "CONTINUE" char(5);
>     SQL>

# SET制御文

> ターゲットのパラメータまたは変数名に値を代入します。

## 環境

> SET代入制御文は、次の環境の複合文で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### parameter

> ### variable-name

> SQLが値式またはNULL値を格納するターゲットを指定します。

> ### value-expr

> ### NULL

> 値式の値またはNULL値をターゲットのパラメータまたは変数名に代入します。

## 使用方法

> - 値式のデータ型は、そのターゲットのパラメータまたは変数名のデータ型と互換性を持つ必要があります。

> - 値を代入するターゲットの指定が代入値よりも短い場合、代入値は切り捨てられ、SQLSTATEから警告が返されます。

> - NULL値を表すインジケータ・パラメータを指定せずにパラメータに値を代入すると、その値式がNULLの場合はエラーが返されます。

## 例

> 例1: ターゲット・パラメータへの値式の代入

>     BEGIN
>     SET :y = (SELECT COUNT (*) FROM employees);
>     END;

> 例2: ターゲット・パラメータへのNULLの値式の代入

>     BEGIN
>     SET :z = NULL;
>     END;

# SET CATALOG文

> 動的に準備および実行されるSQLユーザー・セッション、または対話型SQLのデフォルトのカタログ名を指定します。このカタログ名は、新たなSET CATALOG文を発行するまで使用されます。

> 1つのマルチスキーマ・データベース内では、異なるカタログに存在する表を1つのSQL文で使用できますが、データベースが異なるカタログの表の場合は使用できません。マルチスキーマ・データベースでオブジェクトを指定する場合にカタログ名を省略すると、デフォルトのカタログ名が使用されます。

## 環境

> SET CATALOG文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### catalog-expression

> マルチスキーマ・データベースのデフォルトのカタログの名前を指定します。マルチスキーマ・データベースでオブジェクトを指定する場合にカタログ名を省略すると、デフォルトのカタログ名が使用されます。デフォルトのカタログ名を指定しない場合、デフォルトはRDB$CATALOGです。

> カタログ名を別名で修飾する場合は、別名とカタログ名のペアに大文字を使用し、この名前のペアを二重引用符で囲む必要があります。

> カタログの詳細は、第2.2.3項を参照してください。

> ### catalog-parameter

> デフォルトのカタログを指定する、プリコンパイルされたSQLのホスト言語変数またはSQLモジュール言語プロシージャの仮パラメータを指定します。カタログ・パラメータには、カタログ式が含まれている必要があります。

> ### catalog-parameter-marker

> 動的SQL文でパラメータ・マーカー（?）を指定します。カタログのパラメータ・マーカーでは、デフォルトのカタログを指定するパラメータを参照します。カタログのパラメータ・マーカーには、カタログ式が含まれるパラメータを指定する必要があります。

> ### catalog-string-literal

> デフォルトのカタログを指定する文字列リテラルを指定します。カタログの文字列リテラルには、一重引用符で囲まれたカタログ式が含まれる必要があります。

## 使用方法

> - SET CATALOGを使用して設定するデフォルトのカタログが存在しなくても、エラー・メッセージは発行されません。ただし、修飾されていない名前を指定してこのカタログを参照すると、次の例に示すエラー・メッセージが表示されます。

>       SQL> ATTACH 'ALIAS CORP FILENAME corporate_data';
>       SQL> SHOW CATALOGS
>       Catalogs in database CORP
>           "CORP.ADMINISTRATION"
>           "CORP.RDB$CATALOG"
>       SQL> SET CATALOG '"CORP.NONEXISTENT"';
>       SQL> SET SCHEMA 'PERSONNEL';
>       SQL> CREATE TABLE NEWTABLE (COL1 REAL);
>       %SQL-F-CATNOTDEF, Catalog NONEXISTENT is not defined

> - 二重引用符で囲まれている、マルチスキーマ・オブジェクト名の左端のペア（デリミタ付き識別子）は大文字で指定する必要があります。他のマルチスキーマ・ネーミング規則の詳細は、第2.2.11項を参照してください。デリミタ付き識別子を小文字で指定すると、次のエラー・メッセージが表示されます。

>       SQL> SET SCHEMA '"corp.administration".accounting';
>       SQL> CREATE TABLE NEWTABLE (COL1 REAL);
>       %SQL-F-NODEFDB, There is no default database
>       SQL> SET SCHEMA '"CORP.ADMINISTRATION".accounting';
>       SQL> CREATE TABLE NEWTABLE (COL1 REAL);
>       SQL>

## 例

> 例1: デフォルト・データベースのスキーマとカタログのデフォルトの設定

> この例では、ユーザーはマルチスキーマ・データベースcorporate_dataにアタッチし、SET SCHEMA文とSET CATALOG文を使用して、デフォルトをcorporate_dataデータベースのカタログADMINISTRATIONとスキーマACCOUNTINGに変更し、スキーマACCOUNTINGに表BUDGETを作成します。

>     SQL> ATTACH 'FILENAME corporate_data';
>     SQL> SHOW CATALOGS;
>     Catalogs in database with filename corporate_data
>         ADMINISTRATION
>         RDB$CATALOG
>     SQL>  SHOW SCHEMAS;
>     Schemas in database with filename corporate_data
>         ADMINISTRATION.ACCOUNTING
>         ADMINISTRATION.PERSONNEL
>         ADMINISTRATION.RECRUITING
>         RDB$SCHEMA
>     SQL> SET CATALOG 'ADMINISTRATION';
>     SQL> SET SCHEMA 'ACCOUNTING';
>     SQL> CREATE TABLE BUDGET (COL1 REAL);
>     SQL> SHOW TABLES;
>          BUDGET
>          DAILY_HOURS
>          DEPARTMENTS
>          .
>          .
>          .
>     SQL> --
>     SQL> -- To see the qualified table names, set default
>     SQL> -- to another schema and catalog.
>     SQL> --
>     SQL> SET CATALOG 'RDB$CATALOG';
>     SQL> SET SCHEMA 'RDB$SCHEMA';
>     SQL> SHOW TABLES
>     User tables in database with filename corporate_data
>          ADMINISTRATION.ACCOUNTING.BUDGET
>          ADMINISTRATION.ACCOUNTING.DAILY_HOURS
>          ADMINISTRATION.ACCOUNTING.DEPARTMENTS
>          .
>          .
>          .

> 例2: 別名を使用したデータベースのデフォルト・カタログの設定

> この例では、ユーザーは、別名CORPを使用してマルチスキーマ・データベースcorporate_dataにアタッチします。デフォルトのカタログを設定すると、スキーマのみで表名を修飾できるため表名を短縮できます。

>     SQL> ATTACH 'ALIAS CORP FILENAME corporate_data';
>     SQL> CREATE TABLE ACCOUNTING.PROJECT_7 (STATUS REAL);
>     %SQL-F-DBHANDUNK, ACCOUNTING is not the alias of a known database
>     SQL> --
>     SQL> -- You cannot qualify the table name without the alias,
>     SQL> -- so SQL assumes ACCOUNTING is the alias, not the schema.
>     SQL> -- Unless you want to qualify the table name with
>     SQL> -- both alias and catalog names, you must set the
>     SQL> -- default catalog to ADMINISTRATION, which
>     SQL> -- contains ACCOUNTING. You must enable ANSI/ISO quoting to do this.
>     SQL> --
>     SQL> SET QUOTING RULES 'SQL92';
>     SQL> SET CATALOG '"CORP.ADMINISTRATION"';
>     SQL> CREATE TABLE ACCOUNTING.PROJECT_7 (STATUS REAL);
>     SQL> SHOW TABLES;
>     User tables in database with filename corporate_data
>          ACCOUNTING.BUDGET
>        .
>        .
>        .
>          ACCOUNTING.PROJECT_7
>          ACCOUNTING.WORK_STATUS
>        .
>        .
>        .