例5: マルチスキーマ・データベースの問合せアウトラインのSTORED NAMEの変更
この例では、マルチスキーマのアウトラインのSTORED NAMEの変更方法を示します。明示的にSTORED NAMEを記述していますが、SQLの場合も同じ技術を使用して、アウトラインに対する一意のSTORED NAMEを生成できます。
SQL> attach 'filename mschema'; SQL> create outline SHOW_TABLE cont> stored name SHOW_TABLE_01 cont> on procedure name SHOW_TABLES; SQL> commit; SQL> disconnect all; SQL> attach 'filename mschema MULTISCHEMA IS OFF'; SQL> alter outline SHOW_TABLE_01 cont> rename to SHOW_THE_TABLES; SQL> commit; |
CREATE MODULE文またはCREATE PROCEDURE文を使用して作成されたプロシージャの属性を変更できます。次のように使用できます。
- 強制的にストアド(SQL)・プロシージャをコンパイルします(COMPILEオプション)。
- 外部プロシージャの属性を変更します。
- プロシージャのコメントを変更します。
ALTER PROCEDURE文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
BIND ON CLIENT SITE
BIND ON SERVER SITE
外部ルーチン実行の実行モデルおよび環境を選択します。CLIENTサイト・バインディングにより、外部ルーチンがアクティブ化され、OpenVMSデータベース・クライアント(アプリケーション)・プロセスで実行されます。これはデフォルトのバインディングです。このバインディングによって最も効率的な実行特性が提供され、I/Oデバイスなどのリソースを共有し、外部ルーチンをクライアント・アプリケーションの一部と同様にデバッグできます。ただし、このバインディングはアドレス空間の制限を受ける場合があります。データベース・バッファと仮想メモリーを共有しているため、このバインディングはクライアント・プロセスのシステム・ユーザー環境に限定されており、高レベルの権限が必要なアプリケーションの実行時に、外部ルーチンを実行することは禁止されています。
SERVERサイト・バインディングにより、外部ルーチンがデータベース・クライアントおよびサーバーとは別のプロセスでアクティブ化されます。このプロセスは、データベース・プロセスと同じノードで開始されます。このバインディングでは、適切な実行特性、より大きいアドレス空間、実際のセッション・ユーザー環境が提供され、高レベルの権限によるクライアント・プロセス制約を受けません。ただし、このバインディングでは、クライアントとI/Oデバイスなどのリソースを共有できないため(特に、クライアント対話型端末への接続がないため)、一般的にルーチンをデバッグできません。
BIND SCOPE CONNECT
BIND SCOPE TRANSACTION
外部ルーチンがアクティブ化される有効範囲と、外部ルーチンが非アクティブ化されるポイントを定義します。デフォルトの有効範囲はCONNECTです。
- CONNECT
データベースからデタッチする(またはデタッチせずに終了する)と、アクティブなルーチンが非アクティブ化されます。- TRANSACTION
トランザクションが中止(COMMITまたはROLLBACK)されると、アクティブなルーチンが非アクティブ化されます。トランザクションを実行していない場合、有効範囲はCONNECTに戻ります。
COMMENT IS string
プロシージャに関するコメントを追加します。SQLでは、SHOW PROCEDURES文の実行時にコメントのテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。この句は、COMMENT ON PROCEDURE文と同義です。
COMPILE
COMPILEオプションにより、Oracle Rdbサーバーで強制的にストアド(SQL)・プロシージャを再コンパイルします。外部プロシージャには反映されません。DROP... CASCADE操作の実行によってプロシージャが無効化されている場合は、COMPILEを使用します。このメカニズムは、以前のバージョンで使用可能なSET FLAGS 'VALIDATE_ROUTINE'メソッドより優先されます。
DEFAULT LOCATION
LOCATION 'image-location'
外部ルーチン・イメージのデフォルトの位置または特定の位置です。結果ファイルの仕様には、タイプ.exeが含まれている必要があります。これは、イメージ・ファイルの仕様または単に論理名になります。
SQLでは、次の要素の組合せに基づいてルーチンを選択します。
- イメージ文字列
位置はDEFAULT LOCATIONにデフォルトで設定されます。これはファイル仕様文字列RDB$ROUTINESを表します。- 論理名変換
WITH ALL LOGICAL_NAME TRANSLATION句およびWITH SYSTEM LOGICAL_NAME TRANSLATION句によって、ロケーション文字列にある論理名の変換方法を指定します。
変換オプションが指定されていない場合、またはWITH ALL LOGICAL_NAME TRANSLATIONが指定されている場合は、論理名はデフォルトの方法で変換されます。
If WITH SYSTEM LOGICAL_NAME TRANSLATIONが指定されている場合は、ロケーション文字列の論理名は、SYSTEM論理名表のEXECUTIVE_MODE論理名のみを使用して展開されます。
external-body-clause
ルーチン名、ルーチンの実行可能イメージの位置、ルーチンをコーディングする言語など、ルーチンのキー特性を識別します。external-body-name
外部ルーチン名です。この名前を指定しない場合は、external-routine-name句で指定した名前がSQLに使用されます。この名前により、ルーチン本体の起動ごとにコールされるルーチン・エントリ・アドレスが定義されます。location句で選択された外部ルーチン・イメージには、この名前付きルーチンが必要です。
引用符付きでない名前は、大文字に変換されます。
LANGUAGE language-name
外部ルーチンがコーディングされたホスト言語の名前です。ADA、C、COBOL、FORTRAN、PASCALまたはGENERALを指定できます。GENERALキーワードを使用すると、任意の言語で記述したルーチンをコールできます。言語固有の情報の詳細は、「使用方法」を参照してください。
notify-clause
特定の外部ルーチンまたはデータベース関連のイベントが発生した場合に、2番目に呼び出される(通知される)ルーチンの名前を指定します。この名前により、通知ルーチンの起動ごとにコールされるルーチン・エントリ・アドレスが定義されます。location句で選択された外部ルーチン・イメージには、この名前付きルーチンが必要です。通知ルーチンに関連するイベントはON BIND、ON CONNECTおよびON TRANSACTIONです。複数のイベントを指定できます。
次に、イベントと各イベントの有効範囲について説明します。
BIND ルーチンのアクティブ化からルーチンの非アクティブ化 CONNECT データベース・アタッチからデータベース切断 TRANSACTION 開始トランザクションからコミットまたはロールバック・トランザクション
RENAME TO
変更するプロシージャの名前を変更します。詳細は、「RENAME文」を参照してください。新規名がシノニム名である場合は、エラーが発生します。
- この文を実行するには、指定したプロシージャに対するALTER権限が必要です。プロシージャがモジュールの一部である場合は、そのモジュールに対するALTER権限が必要です。
- COMPILE句、COMMENT句およびRENAME TO句を除き、ALTER PROCEDURE文の属性はすべて、外部プロシージャにのみ適用されます。
- ALTER PROCEDURE文によって、名前付きプロシージャ用のRDB$ROUTINES表のRDB$LAST_ALTERED列がトランザクションのタイムスタンプで更新されます。
- RENAME TO句には、このデータベースに対して有効なシノニムが必要です。「ALTER DATABASE文」のSYNONYMS ARE ENABLED句に関する説明を参照してください。これらのシノニムがデータベース定義またはアプリケーションによって使用されていない場合は、削除される可能性があります。
- ルーチンに多くの依存性がある場合は、DROP...CASCADEコマンド・シーケンスおよびCREATEコマンド・シーケンスよりALTERが優先的に使用されます。ALTERには、このルーチンと任意のトリガー、ストアド・ルーチンまたは他のデータベース・オブジェクトとの間に存在する既存の依存性情報が保持されているためです。
例1: 新規ルーチンおよび共有可能イメージをターゲットとしたALTER PROCEDUREの使用
この例では、外部プロシージャの位置、ルーチン名および言語を更新しているALTER PROCEDUREを示します。
SQL> show procedure SEND_MAIL Information for procedure SEND_MAIL Procedure ID is: 261 External Location is: SYS$SHARE:SENDMAILSHR.EXE Entry Point is: SEND_MAIL Language is: COBOL GENERAL parameter passing style used Number of parameters is: 2 Parameter Name Data Type Domain or Type -------------- --------- -------------- USR CHAR(30) Parameter position is 1 Parameter is IN (read) Parameter is passed by reference TXT VARCHAR(1000) Parameter position is 2 Parameter is IN (read) Parameter is passed by reference SQL> /* ***> The routine has been rewritten. Use ALTER PROCEDURE ***> to retarget the external routine to use the new ***> implementation, instead of using DROP/CREATE ***> */ SQL> SQL> set quoting rules 'SQL99'; SQL> SQL> alter procedure SEND_MAIL cont> name "send_mail_ext" cont> location 'SYS$SHARE:SENDMAILSHR30.EXE' cont> language C cont> comment 'Use new V3.0 interface routine'; SQL>
プロファイル定義を変更します。
ALTER PROFILE文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールまたはその他の複合文のプロシージャの一部として
- 動的SQLで動的に実行される文として
COMMENT IS 'string'
プロファイルに関するコメントを追加します。SQLでは、SHOW PROFILES文の実行時にコメントのテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。NO DEFAULT TRANSACTION
NO TRANSACTION MODES
NO LIMIT CPU TIME
NO LIMIT ROWS
NO LIMIT TIME
これらのオプションにより、明示的に否定形の属性設定が記録されます。これらの句により、否定された句の現在の設定が削除されます。RENAME TO
変更中のプロファイル名を変更します。詳細は、「RENAME文」を参照してください。ALTER PROFILEでサポートされている他のすべての属性の説明は、「CREATE PROFILE文」を参照してください。
- プロファイルを変更するには、データベースに対するSECUTIRY権限またはOpenVMS SECURITY権限が必要です。
- 詳細は、「CREATE PROFILE文」を参照してください。
次の例では、既存のプロファイルのデフォルトのトランザクションが変更されます。
SQL> ALTER PROFILE DECISION_SUPPORT cont> DEFAULT TRANSACTION READ ONLY;
ロール名を変更したり、ロールにコメントを追加できます。
ALTER ROLE文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
COMMENT IS 'string'
ロールに関するコメントを追加します。SQLでは、SHOW ROLES文の実行時にコメントのテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。IDENTIFIED EXTERNALLY
NOT IDENTIFIED
SQLがオペレーティング・システムからロールを継承するかどうかを指定します。これらの句のいずれかを指定する場合、ロール作成時に指定した句を指定する必要があります。IDENTIFIED EXTERNALLYからNOT IDENTIFIEDにまたはNOT IDENTIFIEDからIDENTIFIED EXTERNALLYにロールを変更する場合、ALTER ROLE文は使用できません。IDENTIFIED EXERNALLY句は、SQLがOpenVMS権利識別子など、オペレーティング・システムのファシリティで定義されたロールを継承することを示します。
NOT IDENTIFIED句は、SQLがオペレーティング・システムのファシリティで定義されたロールを継承せず、ロールはデータベース固有であることを示します。
RENAME TO new-role-name
ロールに付与された権限を変更せずに、既存のロール名を新規ロール名に変更します。部門の名前が変更された場合に、部門名に対応するロールの名前を変更するとします。たとえば、人事部の名前が人事管理部に変更される場合、その部門で使用されるロールをPERSONNELからHUMAN_RESOURCESに変更します。新規ロール名は、データベースにすでに存在しているもの以外にする必要があります。トランザクションがコミットされると、古いロール名はデータベースから削除されます。古いロール名は、必要に応じて再作成または再使用できます。新規ロール名が外部で識別される場合、オペレーティング・システム・グループまたは権利識別子として存在する必要があります。詳細は、「RENAME文」を参照してください。
role-name
(CREATE ROLE文で作成されたロールなど)既存のロールの名前です。
- ロールを変更するには、データベースに対するSECUTIRY権限またはOpenVMS SECURITY権限が必要です。
- SHOW PROTECTION文およびSHOW PRIVILEGE文にALTER ROLE文で作成された新規ロール名が表示されます。
- 外部で識別されたロールのRENAME句を発行する場合、新規ロール名はシステムレベルで存在する必要があります。
例1: ロール名の変更
SQL> -- Change the name of the role from WRITER to DOCUMENTATION. SQL> -- Any privileges granted to the role WRITER are transferred to the role SQL> -- DOCUMENTATION. The role WRITER is deleted from the database. SQL> ALTER ROLE WRITER cont> RENAME TO DOCUMENTATION; SQL> SHOW ROLES; Roles in database with filename mf_personnel.rdb DOCUMENTATION
順序を変更します。順序は、複数のユーザーが一意の整数を生成するためのデータベース・オブジェクトです。順序を使用して、主キーの値を自動的に生成できます。
ALTER SEQUENCE文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
CACHE numeric-value
NOCACHE
CACHE句は、Oracle Rdbで事前に割り当てられ、アクセスを迅速にするためにメモリーに保持される順序の値の数を指定します。数値は2〜2147483647の範囲である必要があります。順序番号の一定のサイクルに収まる値を超える値はキャッシュできません。したがって、CACHE句に使用できる最大値は、次の式の結果値未満にする必要があります。
(MAXVALUE-MINVALUE)/ABS(INCREMENT)
現在のCACHE値が2以上の場合、その値を変更できます。CACHE値を変更する場合、その順序の既存ユーザーは継続して元の設定を使用します。SET FLAGS 'SEQ_CACHE'文を使用して、シングル・プロセスのキャッシュ・サイズを調整できます。詳細は、「SET FLAGS文」を参照してください。
NOCACHEが現在有効であるか、CACHEの値が1の場合、CACHE値を変更できますが、その順序の他のユーザーがCACHEに対するロックを解除するまで待機する必要がある場合があります。(CACHEの値1は、NOCACHEと同等です。)詳細は、「使用方法」を参照してください。
特定の順序のキャッシュは、順序からの番号の初回リクエスト時に、キャッシュが空であり、値がリクエストされた場合に、その順序から移入されます。システム障害の発生時や、キャッシュが解放された場合、フェッチされていない値は破棄されます。失われる値の最大数は、その時点のキャッシュ・サイズと等しくなります。これはCACHEまたはSET FLAGS SEQ_CACHEオプションで指定される値になります。
NOCACHE句では、その都度割り当てられる値を指定します。これは、Rbcルート・ファイルに対するI/OがCACHE値の使用時より大きくなります。
CACHE値を変更した後でも、CACHEの値を変更した時点でその順序を使用していたユーザーは継続して元の設定を使用します。
COMMENT IS 'string'
順序に関するコメントを追加します。SQLでは、SHOW SEQUENCE文の実行時にコメントのテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。CYCLE
NOCYCLE
CYCLE句は、MINVALUEまたはMAXVALUEに達した後も、順序によって値の生成を継続することを指定します。昇順でMAXVALUEに達した後、順序はそのMINVALUEから再開されます。降順でMINVALUEに達した後、順序はそのMAXVALUEから再開されます。NOCYCLE句は、値が最小値または最大値に達した後は、順序によって生成を継続しないことを指定します。この制限を超えて順序を増やそうとすると、エラーが発生します。CYCLE句を変更した後でも、CYCLEを変更した時点でその順序を使用していたユーザーは継続して元の設定を使用します。
INCREMENT BY numeric-value
順序の増分サイズおよび方向(昇順または降順)を指定します。この数値は-2147483648〜2147483647の(0を除く)範囲である必要があります。絶対値はMAXVALUEとMINVALUEの差異未満である必要があります。負の値によって降順が、正の値によって昇順が指定されます。既存の値が正の値の場合、新規の値も正の値である必要があります。同様に、既存の値が負の値の場合、新規の値も負の値である必要があります。つまり、順序は昇順から降順または降順から昇順には変更できません。MAXVALUE numeric-value
NOMAXVALUE
MAXVALUE句は、順序によって生成される最大BIGINT値を指定します。昇順の場合、新規最大値は既存のRDB$NEXT_SEQUENCE_VALUE以上である必要があります。降順の場合、新規最大値は既存のMAXVALUE以上である必要があります。これにより、MAXVALUEの値は現在発行されている値以上になります。また、数値は-9223372036854775808〜9223372036854775808の範囲である必要があります。MAXVALUEはMINVALUE句で指定した値を超えている必要があります。NOMAXVALUE句は、昇順の最大値を9223372036854775808(およびキャッシュ・サイズを減算)、および降順の最大値を-1に指定します。デフォルトはNOMAXVALUE句です。MAXVALUE TINYINT
MAXVALUE SMALLINT
MAXVALUE INTEGER
MAXVALUE BIGINT
SQLでは、数値ではなく、キーワードTINYINT、SMALLINT、INTEGERおよびBIGINTをMAXVALUEに使用できます。これにより、これらのデータ型で使用される順序の範囲設定が簡単になります。指定される値は、このデータ型に割当て可能な正の値の最大値になります。SQLでは、数値ではなく、キーワードTINYINT、SMALLINT、INTEGERおよびBIGINTをMAXVALUEに使用できます。これにより、これらのデータ型で使用される順序の範囲設定が簡単になります。指定される値は、このデータ型に割当て可能な正の値の最大値になります。
MINVALUE numeric-value
NOMINVALUE
MINVALUE句は、順序によって生成される最小符号付きquadword(BIGINT)値を指定します。昇順の場合、新規最小値は既存のMINVALUE以下である必要があります。降順の場合、新規最小値は既存のRDB$NEXT_SEQUENCE_VALUE以下である必要があります。これにより、最小値は現在発行されている値未満になります。また、数値は-9223372036854775808以上である必要があります。MINVALUEはMAXVALUE句で指定した値未満である必要があります。NOMINVALUE句は、昇順の最小値を1、降順の最小値を-9223372036854775808(およびキャッシュ・サイズを加算)に指定します。デフォルトはNOMINVALUE句です。
MINVALUE TINYINT
MINVALUE SMALLINT
MINVALUE INTEGER
MINVALUE BIGINT
SQLでは、数値ではなく、キーワードTINYINT、SMALLINT、INTEGERおよびBIGINTをMINVALUEに使用できます。これにより、これらのデータ型で使用される順序の範囲設定が簡単になります。指定される値は、このデータ型に割当て可能な負の値の最小値になります。ORDER
NOORDER
ORDER句は、それぞれのリクエスト・プロセスに順序番号が必ず順に割り当てられることを指定します。つまり、正確なリクエスト履歴が保持されます。NOORDER句は、順序番号が必ずしもリクエストの順序で生成されないことを指定します。RANDOMIZE
NORANDOMIZE
RANDOMIZE句は、BIGINT値の最上位バイトにおいて、ランダムな値で順序番号が返されることを指定します。これによって、ランダムに配布される一意の値が生成されます。NORANDOMIZE句を指定すると、順序番号は同時に作成された他の値に近いものになります。RANDOMIZE句の利点は、格納した索引の列を更新すると、その値が索引構造の様々な場所に記述されることです。これにより、索引の別の場所にある下位ノードを個別に更新できるため、大規模な索引への同時アクセスが向上します。対照的に、NORANDOMIZE句を指定した場合に生成される順序番号の数値は、同時に生成される他の順序値に近いものになります。これにより、同一または類似する索引ノードの索引が更新され、ソート索引の一部で競合が発生する場合があります。
順序に対して返されるBIGINT値のすべての値範囲が使用されます。このため、NOMAXVALUE句とNOMINVALUE句は順序定義に指定(またはデフォルト設定)する必要があります。BIGINT値の最上位ビットは、ランダムに生成された正の値に設定されます。生成された個別値は、最下位32ビットで返され、その独自性が保たれます。CYCLE句も指定する場合は、最下位32ビットのみが循環します。RDB$SEQUENCES表のRDB$NEXT_SEQUENCE_VALUE列で問合せを実行すると、NEXTVAL疑似列が参照されるまで最上位ビットは割り当てられないため、最下位ビットに生成された値のみが返されます。
RANDOMIZEを指定すると、ORDER、MAXVALUEまたはMINVALUEは指定できなくなります。
RENAME TO
変更する順序の名前を変更します。詳細は、「RENAME文」を参照してください。新規名がシノニム名である場合は、エラーが発生します。新規名は、既存の順序、シノニム、表またはビューに存在しているもの以外にする必要があります。システム・シーケンスの名前は変更できません。
RENAME TO句には、このデータベースに対して有効なシノニムが必要です。「ALTER DATABASE文」のSYNONYMS ARE ENABLED句に関する説明を参照してください。これらのシノニムがデータベース定義またはアプリケーションによって使用されていない場合は、削除される可能性があります。
RESTART WITH
RESTART WITH句によりデータベース管理者は、順序を指定値にリセットできます。値は、MINVALUEからMAXVALUEの範囲内である必要があります。このコマンドでは、順序への排他アクセスが必要です。ALTER SEQUENCE文が正常にコミットされると、順序を使用するアプリケーションは、再開された値に基づく値から開始されます。
注意
IDENTITY列のある表に発行されたTRUNCATE TABLE文により、順序のALTER SEQUENCE...RESTART WITHプロセスが暗黙的に実行され、昇順の場合はMINVALUE、降順の場合はMAXVALUEが適用されます。
sequence-name
定義を変更する順序の名前です。WAIT
NOWAIT
DEFAULT WAIT
MEXTVALへの参照を使用する場合の待機状態を指定します。順序についてNEXTVALを参照するには、順序のその他のユーザーとの同期化が必要です。DEFAULT WAITを指定すると、現在のトランザクションの待機状態(WAITまたはNOWAIT)が使用されます。つまり、NOWAITトランザクション中は待機しません。WAIT(デフォルト)を順序に指定すると、現在のトランザクションの待機状態の設定に関係なく、すべての同期化が次の値まで待機します。これは、アプリケーションでNOWAITトランザクションを使用している場合の推奨設定です。トランザクションまたはデータベースに定義された現在のWAITタイムアウト時間が使用されます。
NOWAITを順序に指定すると、現在のトランザクションの設定に関係なく、すべての同期化は次の値まで待機しません。
WAIT値を変更した後でも、WAITの値を変更した時点でその順序を使用していたユーザーは継続して元の設定を使用します。
- 順序を変更するには、順序に対するALTER権限が必要です。
- START WITH値は変更できません。順序が作成されると、初期値が確立されます。既存の開始値が受け入れられない場合は、順序を削除し、再作成してください。
- 順序を変更しようとする際に別のユーザーが順序を排他ロックしている場合、そのユーザーが自分のトランザクションをコミットまたはロールバックするまで、プロセスは文の実行を待機します。ユーザーが次のいずれかの属性を変更する場合、排他ロックがかけられます。
- INCREMENT BY
- MINVALUEからNOMINVALUE、またはその逆
- MAXVALUEからNOMAXVALUE、またはその逆
- NOCACHEからCACHE
- ORDERからNOORDER、またはその逆
- RDB$SEQUENCESシステム・リレーションのRDB$LAST_ALTERED列の値は、ALTER SEQUENCEコマンドで更新されます。
- RDB$NEXT_SEQUENCE_VALUEの値は、このコマンドでは変更されません。
例1: 順序の変更