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

戻る
戻る
 
次へ
次へ
 

指定しない場合、デフォルトはNO RESTRICTED ACCESSです。

ROWID SCOPE IS ATTACH

ROWID SCOPE IS TRANSACTION

ROWIDキーワードは、DBKEYキーワードのシノニムです。詳細は、この引数リストですでに説明したDBKEY SCOPE IS引数の項を参照してください。

RUNTIME runtime-options

プログラム実行時のデータベース定義のソースを指定します。

runtime-string

実行時にアクセスするデータベースのファイル名またはパス名、およびオプションで実行時にデータベースにアクセスするユーザーのユーザー名およびパスワードを指定する引用符付き文字列またはパラメータです。

USER 'username'

USER DEFAULT

データベース・システムでの権限チェックに使用されるオペレーティング・システムのユーザー名を指定します。

ユーザー名に対する文字列リテラルを指定することも、DEFAULTキーワードを指定することもできます。DEFAULTキーワードによって、プログラムのソース・コードへのユーザー名の配置を回避できます。DEFAULTキーワードを指定する場合、SQLモジュールまたはプリコンパイルされたプログラムのコンパイル時に、コマンドライン修飾子を使用してプログラムにユーザー名を渡します。USERNAME修飾子を使用します。

USING 'password'

USING DEFAULT

USER句で指定されているユーザー名に対するユーザーのパスワードを指定します。

PASSWORDに文字列リテラルを指定することも、DEFAULTキーワードを指定することもできます。DEFAULTキーワードによって、プログラムのソース・コードへのユーザー名の配置を回避できます。DEFAULTキーワードを指定する場合、SQLモジュールまたはプリコンパイルされたプログラムのコンパイル時に、コマンドライン修飾子を使用してプログラムにパスワードを渡します。PASSWORD修飾子を使用します。


使用方法


例1: 埋込みSQLでのデータベースおよび別名の指定

この文は、ファイル仕様担当者によって定義されたデータベースを宣言します。プリコンパイラは、プログラムのコンパイル時にこの定義を使用し、SQLではプログラムの実行時にファイル担当者を使用します。この名前には、論理名もファイルpersonnel.rdbの名前部分も使用できます。


EXEC SQL
       DECLARE PERS_ALIAS ALIAS FOR FILENAME personnel
END-EXEC

例2: アクセス制限付きデータベースの指定

この文は例1と同じですが、データベースのアクセス制限を指定します。


EXEC SQL
       DECLARE PERS_ALIAS ALIAS FOR FILENAME personnel
       RESTRICTED ACCESS
END-EXEC

例3: DECLARE ALIAS文の指定

アプリケーション・プログラムのこの部分で、データベースMIA1およびMIA_CHAR_SETを宣言します。プリコンパイラは、プログラムのコンパイル時にMIA1データベースを使用し、SQLではプログラムの実行時にMIA_CHAR_SETデータベースを使用します。


EXEC SQL
         DECLARE ALIAS
      COMPILETIME FILENAME MIA1
             RUNTIME FILENAME MIA_CHAR_SET
             DEFAULT CHARACTER SET DEC_KANJI
             NATIONAL CHARACTER SET KANJI;

例4: DEFAULTユーザー認証の指定

次の例は、SQLモジュールでユーザー名およびパスワードにDEFAULT句を使用する方法を示しています。


MODULE             TEST_DECLARE
DIALECT            SQL99
LANGUAGE           C
PARAMETER          COLONS
ALIAS              RDB$DBHANDLE
-------------------------------------------------------
-----------------------declarations--------------------
    DECLARE ALIAS COMPILETIME FILENAME mf_personnel
                  USER DEFAULT
                  USING DEFAULT
    RUNTIME :run_time_spec
   .
   .
   .

コマンドライン修飾子を使用して、コンパイル時のユーザー名およびパスワードをプログラムに渡します。たとえば、プログラムをコンパイルするには、次のコマンドラインを使用します。


$ SQLMOD TESTDEC /USER=heleng /PASS= helenspasswd

実行時に、ホスト言語プログラムは、ファイル仕様のみまたは実行時のファイル仕様とユーザー名およびパスワードを指定するように、実行時ユーザーに要求できます。ホスト言語プログラムは、実行時の文字列を作成できます。

たとえば、ホスト言語プログラムがファイル仕様のみを使用する場合、プログラムに渡される変数の値は、次のようになります。


FILENAME "mf_personnel"

ホスト言語プログラムがファイル仕様、ユーザー名およびパスワードを使用する場合、プログラムに渡される変数の値は、次のようになります。


FILENAME "mf_personnel 'USER heleng' USING 'mypassword' "

文字列は引用符で囲む必要があります。一重引用符(')と二重引用符(")のどちらを使用するかは、プログラミング言語によって異なります。

次のDECLARE ALIAS文を使用する場合、ホスト言語プログラムは実行時ユーザーにのみファイル名を指定するよう要求できます。


    DECLARE ALIAS COMPILETIME FILENAME mf_personnel
                  USER DEFAULT
                  USING DEFAULT
    RUNTIME FILENAME :foo


DECLARE CURSOR文

カーソルを宣言します。

カーソルを使用すると、結果表を定義する条件は、DECLARE CURSOR文の選択式によって指定されます。SQLでOPEN文が実行されると、結果表が作成されます。カーソルの結果表が存在するのは、CLOSE文、COMMIT文またはROLLBACK文の実行、プログラムの停止または対話型SQLの終了までです。ただし、保持可能カーソルを定義すると、トランザクション全体で存在できます。保持可能カーソルは、新規のSQLトランザクションが開始されるとオープンしたままその位置を保持できます。

プログラムでは一度に1つずつの行または要素の操作を実行する必要があるため、ホスト言語プログラムにはカーソルが必要です。したがって、文を複数回実行して結果表またはリストの全体を処理する場合があります。

カーソルのスコープは、カーソルが有効なモジュールまたはプログラムの一部を記述します。カーソルのエクステントは、有効である期間を指示します。SQLのすべてのカーソルには、モジュール全体のスコープがあります。

使用するDECLARE CURSOR文に応じて、次のように3つのクラスのカーソルを作成できます。

各クラス内で、次の2種類のカーソルを作成できます。

実行できる操作モードに応じて、カーソルはさらに分類されます。表カーソルには次の4つのモードがあります。

リスト・カーソルには次の2つのモードがあります。

表6-7に、SQLで提供されるクラス、タイプおよびカーソル・モードを示します。

表6-7 クラス、タイプおよびカーソル・モード
DECLARE CURSOR 動的DECLARE CURSOR 拡張動的DECLARE CURSOR  
リスト リスト リスト  
             
挿入専用 挿入専用 挿入専用 挿入専用 挿入専用 挿入専用  
             
読取り専用 読取り専用 読取り専用 読取り専用 読取り専用 読取り専用  
             
更新専用   更新専用   更新専用    
             

たとえば、挿入専用表カーソルを宣言して表にデータを挿入する必要があります。表にリストが含まれている場合は、表カーソルを使用して正しい行に配置し、挿入専用リスト・カーソルを宣言してその行にリストをロードします。カーソルを使用したデータベースへのデータのロードの詳細は、「INSERT文」を参照してください。

DECLARE CURSOR文によって形成された結果表の行を処理するには、OPEN文を使用して最初の行の前にカーソルを配置する必要があります。後続のFETCH文で、端末での表示用またはプログラムでの処理用に各行の値を取得します。(カーソルは再オープンする前にクローズする必要があります。)リストの要素も、OPEN文を使用してリストの最初の要素の前にカーソルを配置し、FETCH文を繰り返して後続の要素を取得することによって同様に処理できます。


環境

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


形式







引数

cursor-name

宣言するカーソルの名前を指定します。モジュールのすべてのカーソル名の間で一意の名前を指定します。有効なSQL名を使用します。ユーザー指定の名前の詳細は、第2.2節を参照してください。

拡張動的DECLARE CURSOR文で、実行時にパラメータを使用してカーソル名を指定できます。拡張動的DECLARE CURSOR文の詳細は、「DECLARE CURSOR文、拡張動的」を参照してください。

FOR select-expr

SQLがカーソルにどの表のどの列および行を含めるかを定義する選択式です。選択式の詳細は、第2.8.1項を参照してください。

FOR UPDATE OF column-name

ユーザーまたはユーザーのプログラムが後でUPDATE文を使用して変更するカーソルの列を指定します。FOR UPDATE句の列名は、FROM句に指定された表またはビューに属している必要があります。

次の場合は、後でUPDATE文を使用して行を変更するためにDECLARE CURSOR文のFOR UPDATE句を指定する必要はありません。

SELECT文のFOR UPDATE OF句は、選択された行をすべてロックしてUPDATE ONLY CURSORセマンティクスを提供します。

INSERT ONLY

新規リストまたは新規行を作成またはオープンするように指定します。

リスト・カーソルを指定してINSERT ONLY句を指定しなかった場合、SQLではデフォルトで読取り専用リスト・カーソルを指定します。

表カーソルを指定してINSERT ONLY句を指定しなかった場合、SQLではデフォルトで更新カーソルを指定します。

挿入専用カーソルを指定した場合、選択リスト内のすべての値式は読取り/書込みである必要があります。挿入リストに対して挿入専用表カーソルを宣言した場合、FROM句に表列名とリスト列名の両方を指定する必要があります。

挿入専用カーソルの使用方法の詳細は、「INSERT文」を参照してください。

LIST CURSOR

データ型LIST OF BYTE VARYINGの列の操作に使用するカーソルを指定します。

OPTIMIZE AS query-name

名前を問合せに割り当てます。SET FLAGS 'STRATEGY'文を定義して、問合せ結果の作成に使用されるアクセス・メソッドを確認する必要があります。

OPTIMIZE FOR

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

OPTIMIZE USING outline-name

選択式で使用する問合せアウトラインを明示的に指定します。これには、選択式とアウトラインでアウトラインIDが異なる場合も含まれます。

アウトラインの作成方法の詳細は、「CREATE OUTLINE文」を参照してください。

OPTIMIZE WITH

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

PRESERVE ON COMMIT

PRESERVE ON ROLLBACK

PRESERVE ALL

PRESERVE NONE

カーソルがオープン状態を保持するタイミングを指定します。

READ ONLY

データベースの更新にカーソルが使用されないことを指定します。

SCROLL

Oracle Rdbでリストの項目をいずれかの方向(上下)またはランダムに読み取ることができることを指定します。次のようなフェッチ・オプションを使用する場合は、SCROLLキーワードを使用する必要があります。

SCROLLを指定しない場合、FETCHのデフォルトはNEXTです。SCROLLはLISTカーソルでのみサポートされます。

TABLE CURSOR

宣言するカーソルがリスト・カーソルではなく表カーソルであることを指定します。カーソル・タイプを指定しなかった場合、SQLではデフォルトで表カーソルを宣言します。

UPDATE ONLY

データベースの更新にカーソルが使用されることを指定します。

フェッチしている行の大部分を更新する場合は更新専用カーソルを使用します。更新専用カーソルによって、Oracle Rdbでは初期の読取り操作中のロックより制約の強いロックが適用されます。このため、READから排他的なWRITEにロックをアップグレードする必要はありません。これによって問合せ当たりのロック・リクエストの総数が削減され、デッドロックの回避に有用な場合があります。

更新専用表カーソルを使用して、表の行を変更します。SQLでは、更新専用リスト・カーソルは使用できません。

WHERE CURRENT OF table-cursor-name

リスト・カーソルに行コンテキストを提供する表カーソルを指定します。指定された表カーソルはDECLARE CURSOR文を使用して定義されている必要があります。

WITH HOLD

カーソルがオープンしたままでトランザクションの終了後にその位置を保持することを指示します。これは保持可能カーソルと呼ばれます。

使用方法