例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> |
この例は、ユーザーが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" |
動的に準備および実行されるSQLユーザー・セッションまたは対話型SQLのデフォルトの別名を指定します。この別名は、新たなSET ALIAS文を発行するまで使用されます。別名を指定しない場合、デフォルトはRDB$DBHANDLEです。
SET ALIAS文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
alias-parameter
デフォルトの別名を指定する、プリコンパイルされたSQLのホスト言語変数またはSQLモジュール言語プロシージャの仮パラメータを指定します。alias-parameter-marker
動的SQL文でパラメータ・マーカー(?)を指定します。別名のパラメータ・マーカーは、デフォルトの別名を指定するパラメータを参照します。alias-string-literal
デフォルトの別名を指定する文字列リテラルを指定します。別名の文字列リテラルは、一重引用符で囲む必要があります。
- SQLでは、2レベルの名前を次の方法で解釈します。
- SQLではピリオド(.)の左にある名前をチェックし、それが別名であるかどうかを判断します。別名と判断すると、その名前を次のように解釈します。
alias-name.table-name
- この名前に別名がない場合、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 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>
特定のインスタンスの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代入制御文は、次の環境の複合文で使用できます。
- 対話型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;
動的に準備および実行される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 . . .