ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


TRACE制御文

トレース拡張デバッグ・フラグが設定された後に値をトレース・ログ・ファイルに書き込みます。TRACE制御文を使用すると、複数の値式を指定できます。この文により、評価対象の値式ごとに値がログ・ファイルに格納されます。

トレース・ロギングを使用すると、複雑な複数文プロシージャをデバッグしやすくなります。


環境

TRACE制御文は、次の環境の複合文で使用できます。


形式



引数

value-expr

単一値の表現または計算に使用される記号または記号の文字列を指定します。

SQLで提供される様々な値式の詳細は、第2.6節を参照してください。


使用方法


例1: 複数文プロシージャのトレース


SQL> ATTACH 'FILENAME MF_PERSONNEL';
SQL> SET FLAGS 'TRACE';
SQL> DECLARE :i INTEGER;
SQL> BEGIN
cont>    WHILE :i <= 10
cont>     LOOP
cont>         TRACE ':i is', :i;
cont>         SET :i = :i +1;
cont>     END LOOP;
cont> END;
~Xt: :i is 0
~Xt: :i is 1
~Xt: :i is 2
~Xt: :i is 3
~Xt: :i is 4
~Xt: :i is 5
~Xt: :i is 6
~Xt: :i is 7
~Xt: :i is 8
~Xt: :i is 9
~Xt: :i is 10

例2: TRACE文が無効の場合の問合せアウトラインの生成


SQL> DECLARE :LN CHAR(40);
SQL> SET FLAGS 'NOTRACE';
SQL> BEGIN
cont> TRACE 'Jobs Held: ',
cont>     (SELECT COUNT(*)
cont>         FROM JOB_HISTORY
cont>         WHERE EMPLOYEE_ID = '00201');
cont> SELECT LAST_NAME
cont>     INTO :LN
cont>     FROM EMPLOYEES
cont>     WHERE EMPLOYEE_ID = '00201';
cont> END;
-- Oracle Rdb Generated Outline :
create outline QO_A17FA4B41EF1A68B_00000000
id 'A17FA4B41EF1A68B966C1A0B083BFDD4'
mode 0
as (
  query (
-- Select
    subquery (
      EMPLOYEES 0     access path index       EMPLOYEES_HASH
      )
    )
  )
compliance optional     ;
SQL>

TRACEが有効な場合に問合せアウトラインが生成されると、問合せはTRACE文の副問合せ用、およびシングルトンSELECT文用の2つが表示されます。

この2番目の問合せアウトラインは、TRACE文が無効のまま実行時に使用されると、問合せに適用できません。アウトラインは準拠が任意で作成されているため、この問合せアウトラインは破棄され、新しい計画が計算されます。準拠が必須の場合、問合せは失敗します。例3を参照してください。


SQL> DECLARE :LN CHAR(40);
SQL> SET FLAGS 'TRACE';
SQL> BEGIN
cont> TRACE 'Jobs Held: ',
cont>     (SELECT COUNT(*)
cont>         FROM JOB_HISTORY
cont>         WHERE EMPLOYEE_ID = '00201');
cont> SELECT LAST_NAME
cont>     INTO :LN
cont>     FROM EMPLOYEES
cont>     WHERE EMPLOYEE_ID = '00201';
cont> END;
-- Oracle Rdb Generated Outline :
create outline QO_A17FA4B41EF1A68B_00000000
id 'A17FA4B41EF1A68B966C1A0B083BFDD4'
mode 0
as (
  query (
-- Trace
    subquery (
      JOB_HISTORY 0   access path index       JOB_HISTORY_HASH
      )
    )
  query (
-- Select
    subquery (
      EMPLOYEES 0     access path index       EMPLOYEES_HASH
      )
    )
  )
compliance optional     ;
~Xt: Jobs Held: 4
SQL>

例3: トレース無効時に作成されたアウトラインの使用時におけるトレースの有効化

この例は、TRACE文を有効にしたときに、TRACEの無効時に定義された問合せアウトラインに与える影響を示しています。


SQL> DECLARE :LN CHAR(40);
SQL>
SQL> BEGIN
cont> TRACE 'Jobs Held: ',
cont>     (SELECT COUNT(*)
cont>         FROM JOB_HISTORY
cont>         WHERE EMPLOYEE_ID = '00201');
cont> SELECT LAST_NAME
cont>     INTO :LN
cont>     FROM EMPLOYEES
cont>     WHERE EMPLOYEE_ID = '00201';
cont> END;
~S: Outline QO_A17FA4B41EF1A68B_00000000 used
~S: Outline/query mismatch; assuming JOB_HISTORY 0 renamed to EMPLOYEES 0
~S: Full compliance with the outline was not possible
Get     Retrieval by index of relation EMPLOYEES
  Index name  EMPLOYEES_HASH [1:1]       Direct lookup


TRUNCATE TABLE文

表のメタデータ定義を保持しながら、表内のデータを削除します。これには、均一の領域でデータを高速に削除でき、依存性データが変更されないという利点があります。

環境

TRUNCATE TABLE文は次の環境で使用できます。


形式



引数

table-name

切り捨てる表の名前を指定します。

使用方法


例1: メタデータ定義を保持した状態での表内のデータの削除

次の例は、メタデータ定義を保持しながらSALARY_HISTORY表からデータを削除する方法を示しています。


SQL> TRUNCATE TABLE salary_history;
SQL> --
SQL> -- The table still exists, but the rows are deleted.
SQL> --
SQL> SELECT * FROM salary_history;
0 rows selected
SQL> SHOW TABLE (COLUMN) salary_history;
Information for table SALARY_HISTORY

Columns for table SALARY_HISTORY:
Column Name                     Data Type        Domain
-----------                     ---------        ------
EMPLOYEE_ID                     CHAR(5)          ID_DOM
 Foreign Key constraint SALARY_HISTORY_FOREIGN1
SALARY_AMOUNT                   INTEGER(2)       SALARY_DOM
SALARY_START                    DATE VMS         DATE_DOM
SALARY_END                      DATE VMS         DATE_DOM


UNDECLARE変数文

ストアド・プロシージャの起動、およびモジュールまたは埋込みSQLプログラムのプロシージャのテスト用として使用された、対話型SQLおよび動的SQLから変数定義を削除します。

環境

UNDECLARE文は次の環境で使用できます。


形式



引数

variable-name

ローカル変数の名前を指定します。

例1: 対話型SQLにおける変数の宣言の解除


SQL> ATTACH 'FILENAME personnel';
SQL>
SQL> DECLARE :X INTEGER;
SQL> DECLARE :Y CHAR(10);
SQL>
SQL> BEGIN
cont>   SET :X = 100;
cont>   SET :Y = 'Active';
cont> END;
SQL> PRINT :X, :Y;
           X   Y
         100   Active
SQL> SHOW VARIABLES
X                               INTEGER
Y                               CHAR(10)
SQL> UNDECLARE :X, :Y;


UPDATE文

表またはビューの行を変更します。

環境

UPDATE文は次の環境で使用できます。


形式





引数

column-name

値を変更する列の名前を指定します。

correlation-name

UPDATE文の条件で表または表を識別するために使用可能な名前を指定します。相関名の詳細は、第2.2.4.1項を参照してください。

CURRENT OF cursor-name

WHERE句でCURRENT OF cursor-nameを使用すると、指定したカーソルが配置されている行のみが変更されます。UPDATE文に指定するカーソルは、次の条件を満たしている必要があります。

DEFAULT

列またはドメインに定義されているDEFAULTが割り当てられます。DEFAULTが定義されていない場合、NULLが想定されます。

UPDATE文でDEFAULT句を使用すると、次のいずれかが適用されます。

INTO parameter

指定された値を指定されたパラメータに挿入します。

INTOパラメータ句は、対話型SQLではオプションです。この場合、返された値が表示されます。

NULL

NULLキーワードを指定します。NULLを指定する列にはNULL値が割り当てられます。NULL値が割り当てられる列では、NULL値を許可すると定義する必要があります(NOT NULL句がないCREATE TABLE文またはALTER TABLE文で定義)。

OPTIMIZE AS query-name

名前を問合せに割り当てます。

OPTIMIZE FOR

OPTIMIZE FOR句は、選択式を指定する文の優先オプティマイザ計画を指定します。次のオプションを使用できます。

OPTIMIZE USING outline-name

問合せのアウトラインIDとアウトラインのIDが異なっている場合でも、UPDATE文で使用する問合せアウトラインに明示的に名前を付けます。

OPTIMIZE WITH

以前のRdbバージョンで使用されていたDEFAULT、行数が少ない方が選択されると仮定するAGGRESSIVE、問合せにリテラルを使用して索引で予備評価を行うSAMPLEDの3つの最適化制御のいずれかを選択します。

predicate

WHERE句に条件が含まれる場合、条件がTRUEとなるターゲット表のすべての行が変更されます。

条件に指定した列は、ターゲット表またはターゲット・ビューの列である必要があります。ターゲット表は、条件内の列選択式では指定できません。

条件の詳細は、第2.7節を参照してください。

RETURNING value-expr

値式で指定されている列の値を返します。DBKEYを指定すると、更新される行のデータベース・キー(dbkey)が返されます。DBKEYの値が有効な場合は、後続の問合せでDBKEYの値を使用して行に直接アクセスできます。

LIST OF BYTE VARYINGデータ型の列のセグメントへの値の割当てに使用されるUPDATE文では、RETURNING DBKEY句は無効です。

RETURNING句を指定する場合、1行のみを更新できます。

SET

表またはビュー内のどの列でどのような値を取得するかを指定します。変更する列ごとに、列名、および値式、NULLキーワードまたはDEFAULTキーワードのいずれかを指定する必要があります。等号記号の後ろにある値が、等号記号の前にある列に割り当てられます。

table-name

view-name

変更するターゲット表またはターゲット・ビューの名前を指定します。

value-expr

変更した列の新規の値を指定します。値式に指定した列は、UPDATEキーワードの後ろに指定した表またはビューの列である必要があります。この値の指定には、パラメータ、修飾パラメータ、列選択式、値式またはデフォルト値を使用できます。

パラメータ、修飾パラメータ、列選択式、値式およびデフォルト値の詳細は、第2章を参照してください。

WHERE

SET句に指定する値に応じて変更されるターゲット表またはターゲット・ビューの行を指定します。WHERE句を省略した場合、SQLではターゲット表またはターゲット・ビューのすべての行が変更されます。WHERE句には条件またはカーソル名を指定できます。

使用方法


例1: 対話型SQLでのUPDATE文の使用

次の対話型SQLの例は、EMPLOYEE_ID 00164を持つ従業員の住所を変更し、変更内容を確認しています。


SQL> UPDATE EMPLOYEES
cont>   SET ADDRESS_DATA_1 = '16 Ridge St.'
cont>   WHERE EMPLOYEE_ID = '00164';
1 row updated
SQL> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, ADDRESS_DATA_1
cont>   FROM EMPLOYEES
cont>   WHERE EMPLOYEE_ID = '00164';
 EMPLOYEE_ID   FIRST_NAME   LAST_NAME        ADDRESS_DATA_1
 00164         Alvin        Toliver          16 Ridge St.
1 row selected

例2: プログラムでのUPDATE文の使用

次の例は、埋込みSQL文でホスト言語変数を使用して従業員のステータス・コードを更新する方法を示しています。


   DISPLAY "Enter employee's ID number: " WITH NO ADVANCING.
   ACCEPT ID.
   DISPLAY "Enter new status code: " WITH NO ADVANCING.
   ACCEPT STATUS-CODE.

EXEC SQL
        DECLARE TRANSACTION READ WRITE
END-EXEC

EXEC SQL
        UPDATE EMPLOYEES
                SET STATUS_CODE = :STATUS-CODE
                WHERE EMPLOYEE_ID = :ID
END-EXEC

EXEC SQL  COMMIT  END-EXEC


WHENEVER文

埋込みSQL文の結果として次のいずれかの例外条件が発生したときにホスト言語プログラムが採用する実行パスを指定します。

これらの条件において、WHENEVER文により、プログラムの実行を続行するか、プログラムの別の部分に分岐するように指定します。


環境

WHENEVER文は、ホスト言語プログラムでのみ発行できます。

形式



引数

CONTINUE

エラーが生成された文に続く次の順次処理文の実行を続行するように指定します。

GOTO host-label-name

GOTO host-label-number

ホスト・ラベルによって識別される文に分岐するように指定します。ホスト・ラベルの形式は、ホスト言語によって異なります。コロン(:)は、名前によって表されるホスト・ラベルの前で使用できますが、数値によって表されるホスト・ラベルの前では使用できません。

NOT FOUND

結果表のすべての行が処理されるときに返される例外条件を示します。

これは、値100のSQLCODE変数、値'02000'のSQLSTATE変数、およびRDB$_STREAM_EOFエラーによって識別される条件と同じです。

SQLERROR

任意のエラー条件を示します。WHENEVER文のSQLERROR引数の場合、エラー条件は、SQLCODEに負の値を返す任意の条件として定義されます。SQLCODEフィールドが負の値になる条件のリストは、付録Cを参照してください。

SQLWARNING

任意の警告条件を示します。SQLSTATEステータス・パラメータに関する警告の原因となる条件のリストは、付録Cを参照してください。

使用方法


例1: PL/IプログラムでのWHENEVER文の使用


/* When an SQL statement results in
an RDB$_STREAM_EOF error, the
program branches to LABEL_NOT_FOUND: */
EXEC SQL WHENEVER NOT FOUND GOTO LABEL_NOT_FOUND;

/* When an SQL statement results in a
warning severity error condition, the
program branches to LABEL_ERROR: */
EXEC SQL WHENEVER SQLWARNING GOTO LABEL_ERROR;

/* When an SQL statement results in
an error severity exception condition, the
program branches to LABEL_ERROR: */
EXEC SQL WHENEVER SQLERROR GOTO LABEL_ERROR;