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

戻る
戻る
 
次へ
次へ
 


DECLARE FUNCTION文

データベース定義文で使用する外部ファンクション・インタフェースを宣言します。

DECLARE FUNCTION文の詳細は、「DECLAREルーチン文」を参照してください。プロシージャ宣言の詳細は、「DECLAREルーチン文」を参照してください。


DECLARE LOCAL TEMPORARY TABLE文

明示的にローカル一時表を宣言します。

宣言されたローカル一時表のメタデータはデータベースに格納されず、他のモジュールと共有できません。このような表はスクラッチ表とも呼ばれます。

表に格納されているデータは、単一のセッションのSQLセッション間や複数のモジュール間では共有できません。永続実表と異なり、メタデータおよびデータはSQLセッションの範囲を超えて永続しません。

宣言されたローカル一時表に加えて、他に次の2つの種類の一時表があります。

グローバル一時表およびローカル一時表の詳細は、「CREATE TABLE文」を参照してください。


環境

DECLARE LOCAL TEMPORARY TABLE文は次の環境で使用できます。


形式












引数

dec-local-col-definition

表の列に対する定義です。SQLでは、列定義の指定には次の2通りの方法があります。

列定義の詳細は、「CREATE TABLE文」を参照してください。データ型の詳細は、第2.3節を参照してください。

ON COMMIT PRESERVE ROWS

ON COMMIT DELETE ROWS

宣言されたローカル一時表で、COMMIT文の後にデータを保存するか、削除するかを指定します。

指定しない場合、デフォルトはON COMMIT DELETE ROWSです。

table-name

宣言する表の名前です。オプションで表名の前に別名とピリオド(.)を付けることができます。ただし、表名の前にはキーワードMODULEとピリオド(.)を付ける必要があります(MODULE.EMPL_PAYROLLなど)。

使用方法


1ストアド・モジュールの内部に定義されている場合は、宣言されたローカル一時表を参照できます。
2一時表からのみ可能です。
3ENABLE COMPRESSION属性またはDISABLE COMPRESSION属性のみ指定可能です。
4そのような参照は無視されます。


グローバル一時表およびローカル一時表の詳細は、「CREATE TABLE文」を参照してください。

  • 宣言されたローカル一時表の名前はキーワードMODULEおよびピリオド(.)で修飾されているため、宣言されたローカル一時表は永続実表またはビューと同じ名前を持つことができます。


    例1: 対話型SQLでの宣言されたローカル一時表の宣言および使用


    SQL> DECLARE LOCAL TEMPORARY TABLE MODULE.PAYCHECK_DECL_INT
    cont>        (EMPLOYEE_ID ID_DOM,
    cont>         LAST_NAME CHAR(14),
    cont>         HOURS_WORKED INTEGER,
    cont>         HOURLY_SAL   INTEGER(2),
    cont>         WEEKLY_PAY   INTEGER(2))
    cont>        ON COMMIT PRESERVE ROWS;
    SQL> --
    SQL> INSERT INTO MODULE.PAYCHECK_DECL_INT
    cont>          (EMPLOYEE_ID, LAST_NAME, HOURS_WORKED, HOURLY_SAL, WEEKLY_PAY)
    cont>           SELECT P.EMPLOYEE_ID, E.LAST_NAME, P.HOURS_WORKED,
    cont>                  P.HOURLY_SAL, P.HOURS_WORKED * P.HOURLY_SAL
    cont>              FROM EMPLOYEES E, PAYROLL P
    cont>                  WHERE E.EMPLOYEE_ID = P.EMPLOYEE_ID
    cont>                    AND P.WEEK_DATE = DATE '1995-08-01';
    100 rows inserted
    
    SQL> SELECT * FROM MODULE.PAYCHECK_DECL_INT LIMIT TO 2 ROWS;
     EMPLOYEE_ID   LAST_NAME        HOURS_WORKED       HOURLY_SAL       WEEKLY_PAY
     00165         Smith                      40            30.50          1220.00
     00166         Dietrich                   40            36.00          1440.00
    2 rows selected
    

    例2: 次のものを含むストアド・モジュールの作成

    • 宣言されたローカル一時表MODULE.PAYCHECK_DECL_TAB

    • プロシージャPAYCHECK_INS_DECL(宣言されたローカル一時表MODULE.PAYCHECK_DECL_TABに週間給与レコードを挿入)

    • プロシージャLOW_HOURS_DECL(労働時間が40時間未満の従業員数のカウント)

    次の例も、モジュール内からのみ宣言されたローカル一時表にアクセスできることを示しています。


    SQL> -- Create the module containing a declared temporary table.
    SQL> --
    SQL> CREATE MODULE PAYCHECK_DECL_MOD
    cont>   LANGUAGE SQL
    cont>   DECLARE LOCAL TEMPORARY TABLE MODULE.PAYCHECK_DECL_TAB
    cont>          (EMPLOYEE_ID ID_DOM,
    cont>           LAST_NAME CHAR(14) ,
    cont>           HOURS_WORKED INTEGER, HOURLY_SAL INTEGER(2),
    cont>           WEEKLY_PAY   INTEGER(2))
    cont>           ON COMMIT PRESERVE ROWS
    cont> --
    cont> -- Create the procedure to insert rows.
    cont> --
    cont>   PROCEDURE PAYCHECK_INS_DECL;
    cont>   BEGIN
    cont>     INSERT INTO MODULE.PAYCHECK_DECL_TAB
    cont>          (EMPLOYEE_ID, LAST_NAME, HOURS_WORKED, HOURLY_SAL, WEEKLY_PAY)
    cont>           SELECT P.EMPLOYEE_ID, E.LAST_NAME, P.HOURS_WORKED,
    cont>                  P.HOURLY_SAL, P.HOURS_WORKED * P.HOURLY_SAL
    cont>                  FROM EMPLOYEES E, PAYROLL P
    cont>                  WHERE E.EMPLOYEE_ID = P.EMPLOYEE_ID
    cont>                    AND P.WEEK_DATE = DATE '1995-08-01';
    cont>   END;
    cont> --
    cont> -- Create the procedure to count the low hours.
    cont> --
    cont>   PROCEDURE LOW_HOURS_DECL (:cnt INTEGER);
    cont>   BEGIN
    cont>     SELECT COUNT(*) INTO :cnt FROM MODULE.PAYCHECK_DECL_TAB
    cont>            WHERE HOURS_WORKED < 40;
    cont>   END;
    cont> END MODULE;
    SQL> --
    SQL> -- Call the procedure to insert the rows.
    SQL> --
    SQL> CALL PAYCHECK_INS_DECL();
    SQL> --
    SQL> -- Declare a variable and call the procedure to count records with
    SQL> -- low hours.
    SQL> --
    SQL> DECLARE :low_hr_cnt integer;
    SQL> CALL LOW_HOURS_DECL(:low_hr_cnt);
      LOW_HR_CNT
               2
    
    SQL> --
    SQL> -- Because the table is a declared local temporary table, you cannot
    SQL> -- access it from outside the stored module that contains it.
    SQL> --
    SQL> SELECT * FROM MODULE.PAYCHECK_DECL_TAB;
    %SQL-F-RELNOTDCL, Table PAYCHECK_DECL_TAB has not been declared in module or
    environment
    


    DECLARE MODULE文

    キャラクタ・セット、引用ルール、および非ストアド・モジュールのデフォルトの日付書式などの特性を指定します。

    環境

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

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

    • コンテキスト・ファイル内

    このコマンドは実行可能ではありません。


    形式






    引数

    ALIAS alias-name

    モジュールの別名を指定します。モジュールの別名を指定しない場合、デフォルトの別名はモジュールの認可識別子です。

    FIPSフラガーが有効である場合、ALIAS句(単独で、またはAUTHORIZATION句とともに使用)は非標準構文としてフラグが付けられます。

    アプリケーションが複数のモジュール間で参照する必要があるデータベースが1つのみの場合は、実行可能イメージを構成するためにリンクされるすべてのモジュールで、デフォルト・データベースに同じ別名を使用すると便利です。

    AUTHORIZATION auth-id

    モジュールの認可識別子を指定します。スキーマ句を指定しない場合、認可識別子によってデフォルト・スキーマが指定されます。

    ANSI/ISO 1989規格に準拠する場合は、スキーマ名なしでAUTHORIZATION句を指定します。ANSI/ISO SQL規格に準拠する場合は、AUTHORIZATION句とスキーマ名を指定します。

    マルチスキーマ・データベースにアタッチする場合、各スキーマの認可識別子はモジュールをコンパイルしているユーザーのユーザー名です。この認可識別子はデフォルトの別名およびスキーマを定義します。SCHEMA句とDECLARE ALIAS文を使用してデフォルトをオーバーライドできます。

    単一スキーマ・データベースにアタッチするか、またはATTACH文またはDECLARE ALIAS文にMULTISCHEMA IS OFFを指定してAUTHORIZATION句とALIAS句の両方を指定した場合、RIGHTS RESTRICT句を使用する場合を除き認可識別子はSQLによって無視されます。RIGHTS RESTRICT句によって、SQLでは権限チェックのモジュールAUTHORIZATION句に指定された認可識別子が使用されるようになります。

    SQLモジュールのプロシージャが常に認可識別子で表名を修飾する場合、AUTHORIZATION句はプロシージャのSQL文には影響しません。

    FIPSフラガーが有効である場合、AUTHORIZATION句の省略は非標準構文としてフラグが付けられます。

    CATALOG catalog-name

    モジュールのデフォルトのカタログを指定します。カタログとは、マルチスキーマ・データベース内のスキーマのグループのことです。マルチスキーマ・データベースでオブジェクトを指定する場合にカタログ名を省略すると、デフォルトのカタログ名RDB$CATALOGが使用されます。マルチスキーマ属性なしで作成されたデータベースにはカタログがありません。SET CATALOG文を使用すると、動的または対話型SQLの現在のデフォルトのカタログ名を変更できます。

    CHARACTER LENGTH CHARACTERS

    CHARACTER LENGTH OCTETS

    文字列パラメータ、列およびドメインの長さを文字またはオクテットのどちらで解釈するかを指定します。デフォルトはオクテットです。

    DEFAULT CHARACTER SET support-char-set

    キャラクタ・セットによって修飾されないパラメータのキャラクタ・セットを指定します。デフォルトはDEC_MCSです。この句は、NAMES ARE句で指定されたキャラクタ・セットをオーバーライドします。使用可能なキャラクタ・セットのリストは、第2.1節を参照してください。

    DEFAULT DATE FORMAT SQL99

    DEFAULT DATE FORMAT VMS

    CURRENT_TIMESTAMP組込みファンクションのデータ型、およびDATEデータ型を指定した列またはCAST式のデフォルトの解釈を制御します。DATEデータ型およびCURRENT_TIMESTAMPデータ型は、VMSまたはANSI/ISO規格形式のどちらでもかまいません。

    VMSを指定した場合、両方のデータ型がVMS形式として解釈されます。VMS形式のDATEおよびCURRENT_TIMESTAMPには、YEAR TO SECONDフィールドが含まれます。

    SQL99またはSQL92を指定した場合、両方のデータ型がSQL標準形式として解釈されます。SQL形式のDATEには、YEAR TO DAYフィールドのみが含まれます。

    デフォルトはVMSです。

    SQLOPTIONS = ANSI_DATE修飾子は将来のリリースで廃止予定のため、DEFAULT DATE FORMAT句を使用してください。

    DIALECT

    次の設定を制御します。

    • 文字列パラメータ、列およびドメインの長さを文字とオクテットのどちらで解釈するか

    • 二重引用符を文字列リテラルとデリミタ付き識別子のどちらで解釈するか

    • 識別子をキーワードにできるかどうか

    • どのビューが読取り専用か

    • DATEデータ型またはCURRENT_TIMESTAMPデータ型を持つ列をVMSとSQL99のどちらの形式で解釈するか

    DIALECT句によって、各設定を個々に指定するのではなく1つの句で設定を指定できます。モジュール・プロセッサはモジュール句を順番に処理するため、DIALECT句ではその前に指定された句の設定をオーバーライドすることも、その後に指定される句でオーバーライドされることも可能です。

    次の説明はSQL99言語固有です。

    • デフォルトの制約の評価時間の設定が、DEFERRABLEからNOT DEFERRABLEに変更されています。

    • データの格納時またはデータの取得時に文字のデータ型が変換される場合、特定の状況下では例外または警告が発生します。

    • SQLモジュール内の仮パラメータにはDECIMALまたはNUMERICを指定できます。また、ホスト言語パラメータをパック10進数または符号付き数値の記憶域形式で宣言できます。指定された精度を超える処理を実行しようとすると、エラー・メッセージが生成されます。

    • USERキーワードにより、リクエストに対して現在アクティブなユーザー名を指定します。

    • SETファンクションからNULL値が削除されると、警告が生成されます。

    • ビューに対してWITH CHECK OPTION句を使用すると、整合性制約障害のために個別エラー・コードが返されます。

    • C文字列がNULLで終了していない場合、例外が生成されます。

    表6-15は、各環境に応じた言語設定を示しています。

    DISPLAY CHARACTER SET names-char-set

    Oracle RdbからSQLへ返されるテキスト文字列で想定されるキャラクタ・セットのエンコーディングおよび特性を指定します。詳細は、「CREATE DATABASE文」の「使用方法」を参照してください。

    IDENTIFIER CHARACTER SET names-char-set

    表名および列名など、データベース・オブジェクト名に使用されるキャラクタ・セットを指定します。この句は、NAMES ARE句で指定されたキャラクタ・セットをオーバーライドします。使用可能なキャラクタ・セットおよびオプション値のリストは、第2.1.5項を参照してください。

    指定したキャラクタ・セットには、ASCII文字が含まれている必要があります。

    KEYWORD RULES

    識別子をキーワードにできるかどうかを制御します。SQL99、SQL92、SQL89またはMIAを指定した場合、二重引用符で囲む場合を除き、キーワードを識別子として使用できません。SQLV40を指定した場合は、キーワードを識別子として使用できます。デフォルトはSQLV40です。

    SQLOPTIONS = ANSI_IDENTIFIERは将来のリリースで廃止予定のため、KEYWORD RULES句を使用してください。

    LITERAL CHARACTER SET support-char-set

    キャラクタ・セットまたは各国語キャラクタ・セットによって修飾されないリテラルのキャラクタ・セットを指定します。この句またはNAMES ARE句でキャラクタ・セットを指定しない場合、デフォルトはDEC_MCSです。この句は、NAMES ARE句で指定された修飾されていないリテラルのキャラクタ・セットをオーバーライドします。使用可能なキャラクタ・セットのリストは、第2.1節を参照してください。

    MODULE module-name

    非ストアド・モジュールのオプション名です。モジュール名を指定しない場合、デフォルト名はSQL_MODULEです。

    有効なOpenVMS名を使用します。(ユーザー指定の名前の詳細は、第2.2節を参照してください。)ただし、名前は、実行可能イメージを構成するため一緒にリンクされたモジュール間で一意である必要があります。

    NAMES ARE names-char-set

    モジュールのデフォルト・キャラクタ・セット、識別子キャラクタ・セットおよびリテラル・キャラクタ・セットに使用されるキャラクタ・セットを指定します。キャラクタ・セットまたは各国語キャラクタ・セットによって修飾されない文字列パラメータも指定します。キャラクタ・セットを指定しない場合、デフォルトはDEC_MCSです。

    この句で指定されたキャラクタ・セットが、特定の接続によってアタッチされたすべてのデータベースのキャラクタ・セットと一致し、ASCII文字を含んでいることを確認する必要があります。使用可能なキャラクタ・セットのリストは、第2.1.5項を参照してください。

    NATIONAL CHARACTER SET support-char-set

    各国語キャラクタ・セットによって修飾されるリテラルのキャラクタ・セットを指定します。使用可能なキャラクタ・セットのリストは、第2.1節を参照してください。

    PARAMETER COLONS

    PARAMETER COLONS句を使用する場合、すべてのパラメータ名をコロン(:)で始める必要があります。これはモジュール言語のコンテキスト・ファイルのみで有効です。このルールは、モジュール言語プロシージャ・パラメータの宣言と参照の両方に適用されます。この句を使用しない場合は、パラメータ名をコロンで始めることはできません。

    現在のデフォルトの動作では、コロンは使用されません。ただし、このデフォルトは廃止予定の構文です。コロンを使用するとANSI/ISO SQL規格モジュールの処理を実行できるようになるため、将来的にはコロンの必須の使用がデフォルトになる予定です。

    SQLOPTIONS = ANSI_PARAMETERS修飾子は将来のリリースで廃止予定のため、PARAMETER COLONS句を使用してください。

    QUOTING RULES

    二重引用符を文字列リテラルまたはデリミタ付き識別子のどちらで解釈するかを制御します。SQLV40を指定した場合は、SQLでは二重引用符をリテラルとして解釈します。残りの言語では、二重引用符はデリミタ付き識別子として解釈されます。デフォルトはSQLV40です。

    SQLOPTIONS = ANSI_QUOTINGは将来のリリースで廃止予定のため、QUOTING RULES句を使用してください。

    RIGHTS INVOKER

    RIGHTS RESTRICT

    その認可識別子がモジュールの認可識別子に一致するユーザーが、モジュールを実行するかどうかを指定します。

    RESTRICTを指定した場合、SQLではデフォルトの認可識別子に基づいて権限チェックが行われます。モジュールでAUTHORIZATION句を使用して異なる認可識別子を指定しないかぎり、モジュールをコンパイルするユーザーの認可識別子がデフォルトの認可識別子です。RESTRICTオプション句を使用すると、モジュールを実行するユーザーのユーザー名が、デフォルトの認可識別子と比較され、正しい認可識別子を持つユーザー以外のすべてのユーザーがそのモジュールを起動できなくなります。マルチスキーマを使用するアプリケーションはすべて、デフォルトで実行者を制限します。

    INVOKERを指定した場合、権限はモジュール実行ユーザーの認可識別子に基づきます。デフォルトはINVOKERです。

    SQLOPTIONS = ANSI_AUTHORIZATION修飾子は将来のリリースで廃止予定のため、RIGHTS句を使用してください。

    SCHEMA schema-name

    モジュールのデフォルト・スキーマ名を指定します。デフォルト・スキーマとは、SQL文によって表および他のスキーマ名が認可識別子で修飾されない場合に、そのSQL文から参照されるスキーマのことです。モジュールにデフォルト・スキーマ名を指定しない場合、デフォルトの認可識別子を指定する必要があります。

    SCHEMA句を使用すると、個々のモジュールがそれぞれ異なるスキーマをデフォルト・スキーマとして宣言できます。これは、複数のスキーマを参照する必要のあるアプリケーションで便利な場合があります。適切なモジュールのプロシージャでスキーマを参照するSQL文を配置すると、それらの文のスキーマ要素名の冗長な修飾を最小限に抑えることができます。

    SCHEMA schema-name AUTHORIZATION auth-idを指定する場合は、モジュールのスキーマ名およびスキーマ認可識別子を指定します。スキーマ認可識別子は、スキーマの所有者および作成者であるとみなされ、すべての権限が含まれます。

    VIEW UPDATE RULES

    コンパイル時に作成されるすべてのビューに、SQLモジュール・プロセッサが更新可能ビューに関するANSI/ISO SQL規格を適用するかどうかを指定します。