ヘッダーをスキップ
Pro*C/C++プログラマーズ・ガイド
11gリリース2(11.2)
B61343-01
  ドキュメント・ライブラリへ
ライブラリ
製品リストへ
製品
目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

F 埋込みSQL文およびディレクティブ

この付録では、SQL標準の埋込み文とディレクティブ、およびOracleの埋込みSQLの拡張機能について説明します。


注意:

この付録では、非埋込みSQLと構文が異なる文のみを説明します。非埋込み文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

この付録の項目は、次のとおりです。

プリコンパイラのディレクティブと埋込みSQL文の概要

埋込みSQL文では、DDL、DMLおよびトランザクション制御文をPro*C/C++プログラム内に置きます。表F-1は、埋込みSQL文とディレクティブの機能の概要を示しています。

表F-2ソース/タイプの列は、次の形式で表記されています。

表F-1 埋込みSQL文とディレクティブの機能概要

ソース/タイプ 説明

ソース

標準SQL(S)またはOracle拡張機能(O)。

タイプ

実行(E)文またはディレクティブ(D)。


表F-2 プリコンパイラ・ディレクティブおよび埋込みSQL文および句

EXEC SQL文 ソース/タイプ 用途

ALLOCATE

O/E

カーソル変数またはオブジェクト型にメモリーを割り当てます。

ALLOCATE DESCRIPTOR

S/E

ANSI動的SQLの記述子を割り当てます。

CACHE FREE ALL

O/E

割り当てられたオブジェクト・キャッシュ・メモリーをすべて解放します。

CALL

S/E

ストアド・プロシージャをコールします。

CLOSE

S/E

保持されているリソースを解放し、カーソルを使用禁止にします。

COLLECTION APPEND

O/E

1つのコレクションの要素を別のコレクションの最後に追加します。

COLLECTION DESCRIBE

O/E

コレクションについての情報を取得します。

COLLECTION GET

O/E

コレクションの要素を取得します。

COLLECTION RESET

O/E

コレクションのスライス・エンドポイントをコレクションの最初にリセットします。

COLLECTION SET

O/E

コレクションの値を更新します。

COLLECTION TRIM

O/E

コレクションの最後から要素を削除します。

COMMIT

S/E

データベースへの変更内容をすべて確定して、現行のトランザクションを終了します(オプションでリソースを解放し、データベースから切断します)。

CONNECT

O/E

インスタンスにログインします。

CONTEXT ALLOCATE

O/E

SQLLIBランタイム・コンテキストにメモリーを割り当てます。

CONTEXT FREE

O/E

SQLLIBランタイム・コンテキストのメモリーを解放します。

CONTEXT OBJECT OPTION GET

O/E

オプションの設定方法を判断します。

CONTEXT OBJECT OPTION SET

O/E

オプションを設定します。

CONTEXT USE

O/D

後続の実行SQL文で使用するSQLLIBランタイム・コンテキストを指定します。

DEALLOCATE DESCRIPTOR

S/E

メモリーを解放するために記述子領域の割当てを解除します。

DECLARE CURSOR

S/D

問合せに対応付けてカーソルを宣言します。

DECLARE DATABASE

O/D

後続の埋込みSQL文でアクセスされる非デフォルト・データベースの識別子を宣言します。

DECLARE STATEMENT

S/D

SQL文にSQL変数名を割り当てます。

DECLARE TABLE

O/D

Pro*C/C++によって埋込みSQL文の意味検査に使用される表構造を宣言します。

DECLARE TYPE

O/D

Pro*C/C++による埋込みSQL文の意味検査に使用される型の構造体を宣言します。

DELETE

S/E

表またはビューの実表から行を削除します。

DESCRIBE

S/E

記述子(ホスト変数の説明を保持している構造体)を初期化します。

DESCRIBE DESCRIPTOR

S/E

ANSI SQL文の変数についての情報を取得します。

ENABLE THREADS

O/E

複数のスレッドをサポートするプロセスを初期化します。

EXECUTE...END-EXEC

O/E

無名PL/SQLブロックを実行します。

EXECUTE

S/E

準備済の動的SQL文を実行します。

EXECUTE DESCRIPTOR

S/E

ANSI方法4動的SQL文を実行します。

EXECUTE IMMEDIATE

S/E

ホスト変数を持たないSQL文を準備して実行します。

FETCH

S/E

問合せで選択された行を取り出します。

FETCH DESCRIPTOR

S/E

ANSI方法4動的SQLを使用して選択された行を取得します。

FREE

O/E

オブジェクト・キャッシュまたはカーソルに割り当てられているメモリーを解放します。

GET DESCRIPTOR

S/E

ANSI SQL記述子領域の情報をホスト変数に移動します。

INSERT

S/E

表またはビューの実表に行を追加します。

LOB APPEND

O/E

LOBの最後に別のLOBを追加します。

LOB ASSIGN

O/E

LOBまたはBFILEロケータを別のロケータに割り当てます。

LOB CLOSE

O/E

LOBまたはBFILEをクローズします。

LOB COPY

O/E

LOB値の全部または一部を別のLOBにコピーします。

LOB CREATE TEMPORARY

O/E

テンポラリLOBを作成します。

LOB DESCRIBE

O/E

LOBから属性を取得します。

LOB DISABLE BUFFERING

O/E

LOBバッファリングを使用禁止にします。

LOB ENABLE BUFFERING

O/E

LOBバッファリングを使用可能にします。

LOB ERASE

O/E

LOBデータの任意の値の消去を任意のオフセットから開始します。

LOB FILE CLOSE ALL

O/E

オープンしているすべてのBFILEをクローズします。

LOB FILE SET

O/E

BFILEロケータにDIRECTORYおよびFILENAMEを設定します。

LOB FLUSH BUFFER

O/E

データベース・サーバーにLOBバッファを書き込みます。

LOB FREE TEMPORARY

O/E

LOBロケータの一時領域を解放します。

LOB LOAD

O/E

BFILEの全部または一部を内部LOBにコピーします。

LOB OPEN

O/E

読込み/書込みアクセスに使用するLOBまたはBFILEをオープンします。

LOB READ

O/E

LOBまたはBFILEの全部または一部をバッファに読み込みます。

LOB TRIM

O/E

LOB値を切り捨てます。

LOB WRITE

O/E

バッファの内容をLOBに書き込みます。

OBJECT CREATE

O/E

キャッシュ内で参照可能オブジェクトを作成します。

OBJECT DELETE

O/E

オブジェクトに削除マークを設定します。

OBJECT DEREF

O/E

オブジェクトを間接参照します。

OBJECT FLUSH

O/E

永続オブジェクトをサーバーに送信します。

OBJECT GET

O/E

オブジェクト属性をC言語のデータ型に変換します。

OBJECT RELEASE

O/E

キャッシュ内のオブジェクトを確保解除します。

OBJECT SET

O/E

キャッシュ内のオブジェクト属性を更新します。

OBJECT UPDATE

O/E

キャッシュ内のオブジェクトに更新マークを設定します。

OPEN

S/E

カーソルに対応付けられた問合せを実行します。

OPEN DESCRIPTOR

S/E

カーソルに対応付けられた問合せを実行します(ANSI動的SQL方法4)。

PREPARE

S/E

動的SQL文を解析します。

REGISTER CONNECT

O/E

外部プロシージャのコールを使用可能にします。

ROLLBACK

S/E

現行のトランザクションを終了し、現行のトランザクションの変更内容をすべて破棄し、ロックをすべて解除します(オプションでリソースを解放し、データベースから切断します)。

SAVEPOINT

S/E

後でロールバックする位置をトランザクション内に指定します。

SELECT

S/E

選択した値をホスト変数に割り当てて、1つ以上の表、ビューまたはスナップショットからデータを取り出します。

SET DESCRIPTOR

S/E

ホスト変数からの情報を記述子領域に設定します。

TYPE

O/D

外部のデータ型をユーザー定義のデータ型と同値化して、外部データ型をホスト変数のクラス全体に割り当てます。

UPDATE

S/E

表またはビューの実表内の既存値を変更します。

VAR

O/D

デフォルトのデータ型を無効にして、特定の外部データ型をホスト変数に割り当てます。

WHENEVER

S/D

エラー状態および警告状態の処置を指定します。


文の説明

ディレクティブおよび文はアルファベット順に並べてあります。各文の説明には、次の項目があります。

ディレクティブおよび文 説明
用途 文の基本的な用途を示します。
前提条件 必要な権限と、文を使用する前に実行する必要がある手順を示します。特記していないかぎり、ほとんどの文ではユーザーのインスタンスでデータベースがオープンされている必要があります。
構文 文のキーワードとパラメータを示します。
キーワードおよびパラメータ 各キーワードとパラメータの用途を示します。
使用上の注意 文の使用方法と条件を示します。
文の例文を示します。
関連項目 関連する文、句およびこのマニュアルの関連項目を示します。

構文図の読み方

埋込みSQLの構文は、わかりやすいように構文図を使用して説明します。構文図は、正しい構文のパスを示す図です。

構文図は、左から右へと矢印が指す方向にたどってください。

文と他のキーワードは、四角形の中に大文字で表記されています。これらの文字は、四角形の中に表示されているとおり正確に入力してください。パラメータは、楕円形の中に小文字で表記されています。記述する文のパラメータを変数に置き換えてください。演算子、デリミタおよび終了記号は、円の中に表記されています。「はじめに」で定義した規則に従って、文の終わりにはセミコロンを付けます。

構文図に複数のパスがある場合は、任意のパスを選択できます。キーワード、演算子またはパラメータの選択肢が複数ある場合は、オプションを縦に並べて示します。次の例では、縦方向に自由に進み、それから横線に戻ることができます。

構文図
図first.gifの説明

この図は、次の文がすべて有効であることを示しています。

EXEC SQL WHENEVER NOT FOUND ... 
EXEC SQL WHENEVER SQLERROR ... 
EXEC SQL WHENEVER SQLWARNING ... 

必須のキーワードとパラメータ

必須のキーワードとパラメータは単一で、あるいは代替の選択肢を縦に並べて示します。必須のキーワードまたはパラメータが1つしかない場合は、メイン・パス、つまり現在たどっている横線上に示します。次の例では、cursorは必須パラメータです。

必須のキーワードおよびパラメータ
図reqp.gifの説明

emp_cursorというカーソルが存在する場合、この図では次の文が有効です。

EXEC SQL CLOSE emp_cursor; 

複数のキーワードまたはパラメータがメイン・パス上に縦に並んでいる場合は、その1つが必須です。つまり、キーワードやパラメータを1つ選択する必要がありますが、メイン・パスのちょうど上にあるものとはかぎりません。次の例では、4つのアクションのうち1つを選択する必要があります。

必須のキーワードおよびパラメータ
図reqp1.gifの説明

オプションのキーワードとパラメータ

キーワードとパラメータがメイン・パス内に縦に並べられている場合、それらはオプションです。次の例では、「AT : db_name」および「WORK」がオプション設定になります。

オプションのキーワードおよびパラメータ
図optional.gifの説明

この図では、oracle2という名前のデータベースが存在する場合、次の文はすべて有効です。

EXEC SQL ROLLBACK; 
EXEC SQL ROLLBACK WORK; 
EXEC SQL AT oracle2 ROLLBACK; 

構文ループ

ループは、その中の構文を何回でも繰り返せることを示します。次の例では、column_nameがループの中にあります。したがって、列名を1つ選択した後に、他の列名をカンマで区切って繰り返し選択できます。

構文ループ
図syntax.gifの説明

DEBIT、CREDITおよびBALANCEが列名の場合、この図では次の文がすべて有効です。

EXEC SQL SELECT DEBIT INTO ... 
EXEC SQL SELECT CREDIT, BALANCE INTO ... 
EXEC SQL SELECT DEBIT, CREDIT, BALANCE INTO ... 

複数パーツの図

複数パーツの図では、メイン・パスがすべて端から端まで結合されていると考えます。次の例は2パーツの図です。

複数パーツの図
図part.gifの説明

この図は、次の文が有効であることを示しています。

EXEC SQL PREPARE statement_name FROM string_literal; 

Oracleの名前

表や列などのOracleデータベース・オブジェクトの名前の長さは、30文字以内にする必要があります。先頭文字は英文字である必要がありますが、残りの文字には、英文字、数字、ドル記号($)、ポンド記号(#)、アンダースコア(_)を任意に組み合せて使用できます。

ただし、名前を引用符(")で囲むと、有効な文字を任意に組み合せて使用できます。この場合、空白は有効な文字ですが、引用符は無効です。

Oracleの名前は、引用符で囲んだ場合を除いて大/小文字の区別がありません。

文の終了記号

どの埋込みSQL図の場合も、各文は文終了記号「;」で終わるものとみなされます。

ALLOCATE(実行可能埋込みSQL拡張機能)

用途

カーソル変数がPL/SQLブロックで参照されるように割り当てるか、オブジェクト・キャッシュに領域を割り当てます。

前提条件

カーソル変数にメモリーを割り当てるには、その前にsql_cursor型のカーソル変数(第4章「データ型とホスト変数」を参照)を宣言する必要があります。

オブジェクト・キャッシュにメモリーを割り当てるには、その前にホスト構造体を指すポインタとオプションのインジケータ構造体を指すポインタを宣言する必要があります。

データベースへの接続が必ずアクティブである必要があります。

構文

ALLOCATE
図allocat.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
db_name 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。これが省略される、または空の文字列である場合は、デフォルトのデータベース接続とみなされます。
host_variable データベース接続の名前を含むホスト変数。
cursor_variable 割り当てるカーソル変数。
host_ptr オブジェクト型に対してOTTにより生成されるホスト構造体へのポインタ、sql_context型のコンテキスト変数、OCIRowidへのタイプ・ポインタのROWID変数、またはLOBの型に対応するLOBロケータ変数。
ind_ptr インジケータ構造体へのオプションのポインタ。

使用上の注意

カーソルは静的ですが、カーソル変数は特定の問合せに結び付けられていないため動的です。カーソル変数は、型の互換性のある任意の問合せに対してオープンできます。

この文の詳細は、『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』を参照してください。

この部分的な例では、Pro*C/C++プログラムでALLOCATE文を使用する方法を示します。

EXEC SQL BEGIN DECLARE SECTION;
   SQL_CURSOR emp_cv;
   struct{ ... } emp_rec;
EXEC SQL END DECLARE SECTION;
EXEC SQL ALLOCATE :emp_cv;
EXEC SQL EXECUTE
   BEGIN
      OPEN :emp_cv FOR SELECT * FROM emp;
   END;
END-EXEC;
for (;;)
   {
   EXEC SQL FETCH :emp_cv INTO :emp_rec;
   ...
   }

関連項目

「CACHE FREE ALL(実行可能埋込みSQL拡張機能)」

「CLOSE(実行可能埋込みSQL)」

「EXECUTE(実行可能埋込みSQL)」

「FETCH(実行可能埋込みSQL)」

「FETCH DESCRIPTOR(実行可能埋込みSQL)」

「FREE(実行可能埋込みSQL拡張機能)」

ALLOCATE DESCRIPTOR(実行可能埋込みSQL)

用途

記述子を割り当てるANSI動的SQL文。

前提条件

なし。

構文

ALLOCATE DESCRIPTOR
図alldesc.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size

integer

処理する行数を含むホスト変数。

処理する行数。

descriptor_name

descriptor name

ANSI記述子の名前を含むホスト変数。

ANSI記述子の名前。

GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
WITH MAX integer ホスト変数の最大数。デフォルトは100です。

使用上の注意

DYNAMIC=ANSIプリコンパイラ・オプションを使用します。この文の使用方法は、「ALLOCATE DESCRIPTOR」を参照してください。

EXEC SQL FOR :batch ALLOCATE DESCRIPTOR GLOBAL :binddes WITH MAX 25 ;

関連項目

「DESCRIBE DESCRIPTOR(実行可能埋込みSQL)」

「DEALLOCATE DESCRIPTOR(埋込みSQL文)」

「GET DESCRIPTOR(実行可能埋込みSQL)」

「SET DESCRIPTOR(実行可能埋込みSQL)」

CACHE FREE ALL(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内のすべてのメモリーを解放します。

前提条件

データベースへの接続がアクティブである必要があります。

構文

CACHE FREE ALL
図cache.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
db_name 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。これが省略される、または空の文字列である場合は、デフォルトのデータベース接続とみなされます。
host_variable データベース接続の名前を含むホスト変数。

使用上の注意

接続カウントが0(ゼロ)になると、SQLLIBにより自動的にすべてのオブジェクト・キャッシュ・メモリーが解放されます。詳細は、「CACHE FREE ALL」を参照してください。

EXEC SQL AT mydb CACHE FREE ALL ;

関連項目

「ALLOCATE(実行可能埋込みSQL拡張機能)」

「FREE(実行可能埋込みSQL拡張機能)」

CALL(実行可能埋込みSQL)

用途

ストアド・プロシージャをコールします。

前提条件

データベースへの接続がアクティブである必要があります。

構文

CALL
図call.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
schema プロシージャを含むスキーマ。スキーマを省略すると、Oracleではプロシージャが自分のスキーマ内にあるとみなされます。
pkg プロシージャが格納されているパッケージ。
st_proc コールされるストアド・プロシージャ。
db_link プロシージャがあるリモート・データベースへのデータベース・リンクの完全名または部分名。データベース・リンクの参照の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
expr プロシージャのパラメータになる式のリスト。
ret_var ファンクションの戻り値を受け取るホスト変数。
ret_ind ret_varの標識変数。

使用上の注意

この文の詳細は、「ストアドPL/SQLまたはJavaサブプログラムのコール」を参照してください。

ストアド・プロシージャの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』の「外部ルーチン」の章を参照してください。

int emp_no;
char emp_name[10];
float salary;
char dept_name[20];
...
emp_no = 1325;
EXEC SQL CALL get_sal(:emp_no, :emp_name, :salary) INTO :dept_name ;
/* Print emp_name, salary, dept_name */
...

関連項目

なし

CLOSE(実行可能埋込みSQL)

用途

カーソルのオープン時に取得したリソースを解放し、解析ロックを解除して、カーソルを使用禁止にします。

前提条件

MODE=ANSIの場合は、カーソルまたはカーソル変数はオープンである必要があります。

構文

CLOSE
図close.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
cursor クローズするカーソル。
cursor_variable クローズするカーソル変数。

使用上の注意

クローズしたカーソルからは行をフェッチできません。カーソルを再オープンするには、そのカーソルがクローズされている必要はありません。HOLD_CURSORおよびRELEASE_CURSORのプリコンパイラ・オプションにより、CLOSE文の機能が変更されます。これらのオプションの詳細は、第10章「プリコンパイラのオプション」を参照してください。

この例では、CLOSE文の使用方法を示します。

EXEC SQL CLOSE emp_cursor;

関連項目

「PREPARE(実行可能埋込みSQL)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「OPEN(実行可能埋込みSQL)」

COLLECTION APPEND(実行可能埋込みSQL拡張機能)

用途

1つのコレクションの要素を別のコレクションの最後に追加します。

前提条件

NULLコレクションに追加すること、またはコレクションの上限を超えて追加することはできません。

構文

COLLECTION APPEND
図collapp.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION APPEND」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COLLECTION DESCRIBE(実行可能埋込みSQL拡張機能)

用途

コレクションについての情報を取得します。

前提条件

ALLOCATEおよびOBJECT GET文を使用して記述子を割り当て、記述子にコレクション属性を格納します。

構文

COLLECTION DESCRIBE
図colldes.gifの説明

attribは次のとおりです。

attrib
図collatt.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION DESCRIBE」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COLLECTION GET(実行可能埋込みSQL拡張機能)

用途

コレクションの要素を取得します。

構文

COLLECTION GET
図collget.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION文」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COLLECTION RESET(実行可能埋込みSQL拡張機能)

用途

コレクションのスライス・エンドポイントをコレクションの最初にリセットします。

構文

COLLECTION RESET
図collres.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION RESET」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COLLECTION SET(実行可能埋込みSQL拡張機能)

用途

コレクションの現行のスライスの要素値を更新します。

構文

COLLECTION SET
図collset.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION SET」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COLLECTION TRIM(実行可能埋込みSQL拡張機能)

用途

コレクションの最後から要素を削除します。

構文

COLLECTION TRIM
図colltr.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COLLECTION TRIM」を参照してください。

関連項目

他のCOLLECTION文を参照してください。

COMMIT(実行可能埋込みSQL)

用途

データベースの変更内容をすべて確定し、またオプションですべてのリソースを解放して切断し、現行のトランザクションを終了します。

前提条件

現行のトランザクションをコミットするために必要な権限はありません。

自分でコミットしたインダウトの分散トランザクションを手動でコミットするには、FORCE TRANSACTIONのシステム権限が必要です。他のユーザーがコミットしたインダウトの分散トランザクションを手動でコミットするには、FORCE ANY TRANSACTIONのシステム権限が必要です。

構文

COMMIT
図commit.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT COMMIT文の発行先のデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 値がdb_nameのホスト変数。この句を省略した場合、Oracleではデフォルトのデータベースに対してこの文が発行されます。

WORK 標準SQLに準拠してサポートされます。COMMIT文およびCOMMIT WORK文と同等です。
COMMENT 現行のトランザクションに対応付けるコメントを指定します。'text'は50文字以内の引用符付きリテラルで、トランザクションがインダウトになった場合に、Oracleによりデータ・ディクショナリ・ビューDBA_2PC_PENDINGにトランザクションIDとともに格納されます。
RELEASE リソースをすべて解放し、アプリケーションをサーバーから切断します。
FORCE インダウトの分散トランザクションを手動でコミットします。トランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含む'text'により指定します。これらのトランザクションのIDを検索するには、データ・ディクショナリ・ビューDBA_2PC_PENDINGに問い合せます。また、オプションの整数を使用してトランザクションにシステム変更番号(SCN)を明示的に割り当てることができます。整数を省略した場合、トランザクションは現行のSCNを使用してコミットされます。

使用上の注意

プログラムの最後のトランザクションは、COMMIT文またはROLLBACK文とRELEASEオプションを使用して、必ず明示的にコミットまたはロールバックしてください。プログラムが異常終了すると、変更はOracleによって自動的にロールバックされます。

COMMIT文は、ホスト変数やプログラムの制御の流れには影響しません。この文の詳細は、第3章「データベースの概要」を参照してください。

この例では、埋込みSQL COMMIT文の使用方法を示します。

EXEC SQL AT sales_db COMMIT RELEASE;

関連項目

「ROLLBACK(実行可能埋込みSQL)」

「SAVEPOINT(実行可能埋込みSQL)」

CONNECT(実行可能埋込みSQL拡張機能)

用途

データベースにログインします。

前提条件

指定するデータベースに対してCREATE SESSIONのシステム権限が必要です。

構文

CONNECT
図connect.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
user password ユーザー名とパスワードを個別に指定します。
user_password ユーザー名とパスワードをスラッシュ(/)で区切って格納した1つのホスト変数。

使用中のオペレーティング・システム経由の接続をOracleで検証できるようにするには、:user_passwordの値として「/」を指定します。

AT 接続先のデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 値がdb_nameのホスト変数。この句を省略した場合、Oracleではデフォルトのデータベースに対してこの文が発行されます。

USING 非デフォルトのデータベースへの接続に使用されるOracle Netデータベース指定の文字列を指定します。この句を省略した場合は、デフォルトのデータベースに接続します。
ALTER AUTHORIZATION パスワードを次の文字列に変更します。
new_password 新しいパスワード。
IN SYSDBA MODE

IN SYSOPER MODE

SYSDBAまたはSYSOPERシステム権限で接続します。ALTER AUTHORIZATIONが使用されている場合、またはプリコンパイラ・オプションAUTO_CONNECTにYESが設定されている場合は許可されません。

使用上の注意

プログラムは複数の接続を持つことができますが、デフォルトのデータベースには1回しか接続できません。この文の詳細は、「OCIリリース7コールの埋込み」を参照してください。

次の例では、CONNECTの使用方法を示します。

EXEC SQL CONNECT :username 
    IDENTIFIED BY :password ;

この文では、useridの値に、'SCOTT/TIGER'のように、usernameの値とpasswordの値をスラッシュ(/)で区切って使用することもできます。

EXEC SQL CONNECT :userid ;

関連項目

「COMMIT(実行可能埋込みSQL)」

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「ROLLBACK(実行可能埋込みSQL)」

CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)

用途

EXEC SQL CONTEXT USE文で参照するSQLLIBランタイム・コンテキストを初期化します。

前提条件

ランタイム・コンテキストはsql_context型で宣言する必要があります。

構文

CONTEXT ALLOCATE
図conall.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
context メモリーを割り当てるSQLLIBランタイム・コンテキスト。

使用上の注意

マルチスレッド・アプリケーションでは、ランタイム・コンテキストごとにこのファンクションを実行します。

この文の詳細は、「OCIリリース8のSQLLIB拡張相互運用性」を参照してください。

この例では、Pro*C/C++プログラムでCONTEXT ALLOCATE文を使用する方法を示します。

EXEC SQL CONTEXT ALLOCATE :ctx1;

関連項目

「CONTEXT FREE(実行可能埋込みSQL拡張機能)」

「CONTEXT USE(Oracle埋込みSQLディレクティブ)」

「ENABLE THREADS(実行可能埋込みSQL拡張機能)」

CONTEXT FREE(実行可能埋込みSQL拡張機能)

用途

ランタイム・コンテキストに対応付けられているすべてのメモリーを解放し、ホスト・プログラム変数にNULLポインタを代入します。

前提条件

CONTEXT FREE文を使用して割り当てられているメモリーを解放する前に、指定のランタイム・コンテキストにCONTEXT ALLOCATE文を使用してメモリーが割り当てられている必要があります。

構文

CONTEXT FREE
図confree.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
:context メモリーの割当てを解除する、割当て済のランタイム・コンテキスト。

使用上の注意

この文の詳細は、「OCIリリース8のSQLLIB拡張相互運用性」を参照してください。

この例では、Pro*C/C++プログラムでCONTEXT FREE文を使用する方法を示しています。

EXEC SQL CONTEXT FREE :ctx1;

関連項目

「CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)」

「CONTEXT USE(Oracle埋込みSQLディレクティブ)」

「ENABLE THREADS(実行可能埋込みSQL拡張機能)」

CONTEXT OBJECT OPTION GET(実行可能埋込みSQL拡張機能)

用途

CONTEXT OBJECT OPTION SETによって設定される使用中のコンテキストのオプションの値を決定します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。

構文

CONTEXT OBJECT OPTION GET
図conobget.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
option オプション値については、表17-1「CONTEXT OBJECT OPTION値の有効な選択肢」を参照してください。
host_variable optionリストと同じ順序で表されたSTRING、VARCHAR、CHARZ型の出力変数。

使用上の注意

「CONTEXT OBJECT OPTION SET」を参照してください。

char EuroFormat[50];
...
EXEC SQL CONTEXT OBJECT OPTION GET DATEFORMAT INTO :EuroFormat ;
printf("Date format is %s\n", EuroFormat);

関連項目

「CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)」

「CONTEXT FREE(実行可能埋込みSQL拡張機能)」

「CONTEXT OBJECT OPTION SET(実行可能埋込みSQL拡張機能)」

「CONTEXT USE(Oracle埋込みSQLディレクティブ)」

CONTEXT OBJECT OPTION SET(実行可能埋込みSQL拡張機能)

用途

使用中のコンテキストに対する指定済の日付属性DATEFORMATおよびDATELANGにオプションを設定します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。

構文

CONTEXT OBJECT OPTION GET
図conobset.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
option オプション値については、表17-1「CONTEXT OBJECT OPTION値の有効な選択肢」を参照してください。
host_variable STRING、VARCHAR、CHARZ型の入力変数。optionリストと同じ順序。

使用上の注意

「CONTEXT OBJECT OPTION GET」を参照してください。

char *new_format = "DD-MM-YYY";
char *new_lang = "French";
...
EXEC SQL CONTEXT OBJECT OPTION SET DATEFORMAT, DATELANG TO :new_format, :new_lang;

関連項目

「CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)」

「CONTEXT FREE(実行可能埋込みSQL拡張機能)」

「CONTEXT USE(Oracle埋込みSQLディレクティブ)」

「CONTEXT OBJECT OPTION SET(実行可能埋込みSQL拡張機能)」

CONTEXT USE(Oracle埋込みSQLディレクティブ)

用途

後続の実行SQL文で指定のSQLLIBランタイム・コンテキストを使用するようにプリコンパイラに指示します。

前提条件

CONTEXT USEディレクティブによって指定されたランタイム・コンテキストが事前に宣言されている必要があります。

構文

CONTEXT USE
図conuse.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
context 後続の実行SQL文用に使用する割当て済のランタイム・コンテキスト。たとえば、使用するコンテキストを(複数のコンテキストを割り当てることができる)ソース・コードで指定すると、Oracleサーバーに接続してそのコンテキストの有効範囲内でデータベースを操作できます。DEFAULTは作業したグローバル・コンテキストが使用されることを示します。
DEFAULT グローバル・コンテキストを使用することを示します。

使用上の注意

この文はEXEC SQL INCLUDEまたはEXEC ORACLE OPTIONなどの宣言文では無効です。この文は、標準的なC言語のスコープ規則に従わず、特定のソース・ファイル内で後続するすべての実行SQL文に影響する点では、EXEC SQL WHENEVERディレクティブに似ています。

この文の詳細は、「OCIリリース8のSQLLIB拡張相互運用性」を参照してください。

この例では、Pro*C/C++の埋込みSQLプログラムでCONTEXT USEディレクティブを使用する方法を示します。

EXEC SQL CONTEXT USE :ctx1; 

関連項目

「CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)」

「CONTEXT FREE(実行可能埋込みSQL拡張機能)」

「ENABLE THREADS(実行可能埋込みSQL拡張機能)」

DEALLOCATE DESCRIPTOR(埋込みSQL文)

用途

ANSI動的SQL文で記述子領域の割当てを解除してメモリーを解放します。

前提条件

DEALLOCATE DESCRIPTOR文で指定された記述子は、事前にALLOCATE DESCRIPTOR文を使用して割り当てる必要があります。

構文

DEALLOCATE DESCRIPTOR
図dealdesc.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
descriptor_name

'descriptor name'

割り当てられたANSI記述子の名前が含まれるホスト変数。

割り当てられたANSI記述子の名前。


使用上の注意

DYNAMIC=ANSIプリコンパイラ・オプションを使用します。

この文の詳細は、「DEALLOCATE DESCRIPTOR」を参照してください。

EXEC SQL DEALLOCATE DESCRIPTOR GLOBAL 'SELDES' ;

関連項目

「ALLOCATE DESCRIPTOR(実行可能埋込みSQL)」

「DESCRIBE(実行可能埋込みSQL拡張機能)」

「GET DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

「SET DESCRIPTOR(実行可能埋込みSQL)」

DECLARE CURSOR(埋込みSQLディレクティブ)

用途

カーソルに名前を付け、それをSQL文またはPL/SQLブロックに対応付けて宣言します。

前提条件

SQL文またはPL/SQLブロックの識別子を使用してカーソルを対応付けるには、DECLARE STATEMENT文を使用してこの識別子を事前に宣言する必要があります。

構文

DECLARE CURSOR
図dclco.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT カーソルが宣言されるデータベースを指定します。次のいずれかを使用してデータベースを指定します。
db_name DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。
host_variable 事前に宣言したdb_nameの値を持つホスト変数。

この句を省略した場合、Oracleではデフォルトのデータベースに対してカーソルが宣言されます。

cursor 宣言するカーソルの名前。
WITH HOLD カーソルはCOMMIT後オープンしたままになります。カーソルは更新のために宣言する必要はありません。
SELECT statement カーソルに対応付けるSELECT文。直後の文にINTO句を含めないでください。
statement_name カーソルに対応付けるSQL文またはPL/SQLブロックを指定します。statement_nameまたはblock_nameは、DECLARE STATEMENT文を使用して事前に宣言する必要があります。

使用上の注意

カーソルは、他の埋込みSQL文で参照する前に、宣言する必要があります。カーソル宣言のスコープはプリコンパイル・ユニット内全体になるため、各カーソルの名前はスコープ内で一意になるようにしてください。1つのプリコンパイル・ユニット内で同じ名前のカーソルを複数宣言することはできません。

カーソルは、UPDATE文またはDELETE文のWHERE句内でCURRENT OF構文を使用して参照できます。このとき、カーソルはOPEN文を使用してオープンし、FETCH文を使用して行に位置付けられている必要があります。この文の詳細は、「埋込みPL/SQLのかそるの使用方法」を参照してください。

この例では、DECLARE CURSOR文の使用方法を示します。

EXEC SQL DECLARE emp_cursor CURSOR 
    FOR SELECT ename, empno, job, sal 
        FROM emp 
        WHERE deptno = :deptno 
        FOR UPDATE OF sal; 

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「DECLARE STATEMENT(埋込みSQLディレクティブ)」

「DELETE(実行可能埋込みSQL)」

「FETCH(実行可能埋込みSQL)」

「OPEN DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

「SELECT(実行可能埋込みSQL)」

「UPDATE(実行可能埋込みSQL)」

DECLARE DATABASE(Oracle埋込みSQLディレクティブ)

用途

後続の埋込みSQL文でアクセスされる非デフォルト・データベースの識別子を宣言します。

前提条件

非デフォルト・データベースのユーザー名にアクセスできる必要があります。

構文

DECLARE DATABASE
図dcldbase.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
db_name 非デフォルト・データベースに対して設定する識別子。

使用上の注意

非デフォルト・データベースに対してdb_nameを宣言するのは、他の埋込みSQL文がAT句を使用してそのデータベースを参照できるようにするためです。AT句を指定してCONNECT文を発行する前に、DECLARE DATABASE文を使用して非デフォルト・データベースに対してdb_nameを宣言する必要があります。

この文の詳細は、「単一の明示的接続」を参照してください。

この例では、DECLARE DATABASEディレクティブの使用方法を示します。

EXEC SQL DECLARE oracle3 DATABASE ;

関連項目

「COMMIT(実行可能埋込みSQL)」

「CONNECT(実行可能埋込みSQL拡張機能)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「DECLARE STATEMENT(埋込みSQLディレクティブ)」

「DELETE(実行可能埋込みSQL)」

EXECUTE ... END-EXEC(実行可能埋込みSQL拡張機能).

「EXECUTE IMMEDIATE(実行可能埋込みSQL)」

「INSERT(実行可能埋込みSQL)」

「SELECT(実行可能埋込みSQL)」

「UPDATE(実行可能埋込みSQL)」

DECLARE STATEMENT(埋込みSQLディレクティブ)

用途

SQL文またはPL/SQLブロックの識別子を宣言し、他の埋込みSQL文で使用できるようにします。

前提条件

なし。

構文

DECLARE STATEMENT
図dcl_stmt.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT SQL文またはPL/SQLブロックが宣言されるデータベースを識別します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 値がdb_nameのホスト変数。この句を省略した場合、Oracleではデフォルトのデータベースに対してSQL文またはPL/SQLブロックが宣言されます。

statement_name 文に対して宣言する識別子。

使用上の注意

DECLARE STATEMENT文を使用してSQL文またはPL/SQLブロックの識別子を宣言する必要があるのは、その識別子を参照するDECLARE CURSOR文の埋込みSQLプログラム内での位置が、文またはブロックを解析して識別子と対応付けるPREPARE文よりも物理的に(論理的ではなく)前になっているときのみです。

文の宣言のスコープは、カーソルの宣言と同様に、プリコンパイル・ユニット内全体です。この文の詳細は、第4章「データ型とホスト変数」および第13章「Oracle動的SQL」を参照してください。

例I

この例では、DECLARE STATEMENT文の使用方法を示します。

EXEC SQL AT remote_db DECLARE my_statement STATEMENT; 
EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL EXECUTE my_statement; 

例II

このPro*C/C++の埋込みSQLプログラムからの例では、DECLARE CURSOR文がPREPARE文の前にあるため、DECLARE STATEMENT文が必要です。

EXEC SQL DECLARE my_statement STATEMENT; 
EXEC SQL DECLARE emp_cursor CURSOR FOR my_statement; 
EXEC SQL PREPARE my_statement FROM :my_string; 
...

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「FETCH(実行可能埋込みSQL)」

「OPEN DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

DECLARE TABLE(Oracle埋込みSQLディレクティブ)

用途

それぞれの列のデータ型、デフォルト値、Oracleプリコンパイラによる意味検査のためのNULLまたはNOT NULL仕様部など、表またはビューの構造を定義します。

前提条件

なし。

構文

リレーショナル表に使用する構文は、次のとおりです。

DECLARE TABLE
図dcltab.gifの説明

オブジェクト表に使用する構文は、次のとおりです。

オブジェクト表のDECLARE TALBE
図dcltabob.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
table 宣言した表の名前。
column 表の列。
datatype 列のデータ型。データ型の詳細は、「Oracleのデータ型」を参照してください。

データ型がユーザー定義オブジェクトの場合は、sizeをカッコで囲んで入力できます。sizeはマクロまたは複雑なC言語の式にはできません。sizeは省略できます。例を参照してください。

NOT NULL NULLを含めることのできない列を指定します。
obj_type オブジェクト型を表します。

使用上の注意

この文の使用方法は、「DECLARE TABLEの使用」を参照してください。

次の文により、PARTNO、BIN、QTYの列を持つPARTS表が宣言されます。

EXEC SQL DECLARE parts TABLE 
     (partno NUMBER  NOT NULL, 
      bin    NUMBER, 
      qty    NUMBER); 

次のようにオブジェクト型を使用します。

EXEC SQL DECLARE person TYPE AS OBJECT (name VARCHAR2(20), age INT);
EXEC SQL DECLARE odjtab1 TABLE OF person;

関連項目

「DECLARE TYPE(Oracle埋込みSQLディレクティブ)」

DECLARE TYPE(Oracle埋込みSQLディレクティブ)

用途

プリコンパイラによる意味検査に使用される型の属性を定義します。

前提条件

なし。

構文

DECLARE TYPE
図dcltype.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
column 列の名前。
datatype 列のデータ型。
size VARRAYの要素数。
element_type VARRAYの要素型。オブジェクトにすることもできます。
object_type 以前に宣言されていたオブジェクト型。

使用上の注意

この文の使用方法は、「DECLARE TYPEの使用」を参照してください。

EXEC SQL DECLARE project_type TYPE AS OBJECT(
              pno           CHAR(5),
              pname         CHAR(20),
              budget        NUMBER);
EXEC SQL DECLARE project_array TYPE as VARRAY(20) OF project_type ;
EXEC SQL DECLARE employees TYPE AS TABLE OF emp_objects ;

関連項目

「DECLARE TABLE(Oracle埋込みSQLディレクティブ)」

DELETE(実行可能埋込みSQL)

用途

表またはビューの実表から行を削除します。

前提条件

表から行を削除するには、表が自分のスキーマ内にあるか、表に対してDELETEの権限を持つ必要があります。

ビューの実表から行を削除するには、ビューが属するスキーマの所有者が、実表に対してDELETEの権限を持つ必要があります。また、ビューが自分のスキーマ以外のスキーマ内にある場合は、ビューに対するDELETEの権限を付与されている必要があります。

DELETE ANY TABLEのシステム権限では、どの表またはビューの実表からでも行を削除できます。

構文

DELETE
図delete.gifの説明

DML RETURNING句は次のとおりです。

DELETEのDML RETURNING句
図return.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT DELETE文の発行先のデータベースを識別します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。この句を省略した場合、DELETE文はデフォルトのデータベースに対して発行されます。

FOR :host_integer WHERE句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。この句を省略すると、Oracleでは最小の配列の各コンポーネントについて1回ずつ文が実行されます。
subquery 対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。
schema 表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。
table 行を削除する表の名前。
view ビューの名前。Oracleではビューの実表から行が削除されます。
FOR :host_integer WHERE句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。この句を省略すると、Oracleでは最小の配列の各コンポーネントについて1回ずつ文が実行されます。
subquery 対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。
schema 表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。
table 行を削除する表の名前。
view ビューの名前。Oracleではビューの実表から行が削除されます。

使用上の注意

WHERE句のホスト変数は、すべてスカラーか、すべて配列である必要があります。変数がスカラーの場合、OracleではDELETE文が1回のみ実行されます。変数が配列の場合、Oracleでは配列のコンポーネント・セットごとに1回ずつ文が実行されます。1回の実行で0行または1行、複数行を削除できます。

WHERE句の配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleで文が実行される回数は、次の値のうち小さい方によって決まります。

この条件を満たす行が存在しない場合、行は削除されず、SQLCODEはNOT_FOUND条件を戻します。

削除された行の累積数はSQLCAを介して戻されます。WHERE句に配列ホスト変数が指定されていると、DELETE文によって処理された配列のすべてのコンポーネントにおよぶ削除行数の合計がこの値に設定されます。

条件を満たす行がない場合、OracleではSQLCAのSQLCODEを介してエラーが戻されます。WHERE句を省略した場合、OracleではSQLCAのSQLWARNの第5コンポーネントに警告フラグが設定されます。この文とSQLCAの詳細は、第9章「ランタイム・エラーの処理」を参照してください。

DELETE文でコメントを使用して、指示やヒントをオプティマイザに渡すことができます。オプティマイザはヒントを使用して文の実行計画を選択します。ヒントの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

この例では、Pro*C/C++の埋込みSQLプログラムにおけるDELETE文の使用方法を示します。

EXEC SQL DELETE FROM emp 
    WHERE deptno = :deptno 
    AND job = :job;

EXEC SQL DECLARE emp_cursor CURSOR 
    FOR SELECT empno, comm 
        FROM emp; 
EXEC SQL OPEN emp_cursor; 
EXEC SQL FETCH c1 
    INTO :emp_number, :commission; 
EXEC SQL DELETE FROM emp 
    WHERE CURRENT OF emp_cursor; 

関連項目

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「DECLARE STATEMENT(埋込みSQLディレクティブ)」

DESCRIBE(実行可能埋込みSQL拡張機能)

用途

Oracle記述子に動的SQL文またはPL/SQLブロックについての情報を入力します。

前提条件

埋込みSQLのPREPARE文を使用して、SQL文またはPL/SQLブロックを事前に準備する必要があります。

構文

DESCRIBE
図describe.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
BIND VARIABLES FOR SQL文またはPL/SQLブロックの入力変数に関する情報を保持する記述子を初期化します。
SELECT LIST FOR SELECT文の選択リストに関する情報が含まれる記述子を初期化します。

デフォルトはSELECT LIST FORです。

statement_name PREPARE文を使用して事前に準備したSQL文またはPL/SQLブロックを指定します。
descriptor 入力する記述子の名前。

使用上の注意

埋込みSQLプログラム内のバインド記述子または選択記述子を操作するには、その前にDESCRIBE文を発行する必要があります。

入力変数と出力変数の両方を同じ記述子に記述することはできません。

DESCRIBE文で検出される変数の数は、一意に名前が指定されたプレースホルダの合計数ではなく、準備するSQL文またはPL/SQLブロックのプレースホルダの合計数です。この文の詳細は、第13章「Oracle動的SQL」を参照してください。

この例では、Pro*C/C++の埋込みSQLプログラムにおけるDESCRIBE文の使用方法を示します。

EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL DECLARE emp_cursor 
    FOR SELECT empno, ename, sal, comm 
            FROM emp 
            WHERE deptno = :dept_number;
EXEC SQL DESCRIBE BIND VARIABLES FOR my_statement 
    INTO bind_descriptor; 
EXEC SQL OPEN emp_cursor 
    USING bind_descriptor; 
EXEC SQL DESCRIBE SELECT LIST FOR my_statement 
    INTO select_descriptor; 
EXEC SQL FETCH emp_cursor 
    INTO select_descriptor; 

関連項目

「PREPARE(実行可能埋込みSQL)」

DESCRIBE DESCRIPTOR(実行可能埋込みSQL)

用途

SQL文についての情報を取得するために使用するANSI動的SQL文で、情報は記述子に格納されます。

前提条件

埋込みSQLのPREPARE文を使用して、SQL文を事前に準備する必要があります。

構文

DESCRIBE DESCRIPTOR
図descans.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
statement_id 事前に準備されたSQL文またはPL/SQLブロックの名前。デフォルトはOUTPUTです。
desc_name SQL文についての情報が含まれる記述子の名前が入るホスト変数。
'descriptor name' 記述子の名前。
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。

使用上の注意

DYNAMIC=ANSIプリコンパイラ・オプションを使用します。

INPUT記述子に使用できるのは、COUNTとNAMEのみです。

DESCRIBE文で検出される変数の数は、一意に名前が指定されたプレースホルダの合計数ではなく、準備するSQL文またはPL/SQLブロックのプレースホルダの合計数です。この文の詳細は、「DESCRIBE INPUT」 および「DESCRIBE OUTPUT」を参照してください。

EXEC SQL PREPARE s FROM :my_stament; 
EXEC SQL DESCRIBE INPUT s USING DESCRIPTOR 'in' ;

関連項目

「ALLOCATE DESCRIPTOR(実行可能埋込みSQL)」

「DEALLOCATE DESCRIPTOR(埋込みSQL文)」

「GET DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

「SET DESCRIPTOR(実行可能埋込みSQL)」

ENABLE THREADS(実行可能埋込みSQL拡張機能)

用途

複数のスレッドをサポートするプロセスを初期化します。

前提条件

マルチスレッド・アプリケーションをサポートするプラットフォームでプリコンパイラ・アプリケーションを開発し、コンパイルしている必要があります。また、コマンドラインでTHREADS=YESと指定する必要があります。


注意:

Pro*C/C++プリコンパイラとXAを併用する場合は、XAのマルチスレッド処理を使用する必要があります。EXEC SQL ENABLE THREADS文を使用してPro*C/C++のマルチスレッド処理を使用するとエラーになります。

構文

ENABLE THREADS
図enable_t.gifの説明

キーワードおよびパラメータ

なし。

使用上の注意

ENABLE THREADS文は、他の実行SQL文の前、かつスレッドを作成する前に実行する必要があります。この文では、ホスト変数を指定する必要はありません。

この文の詳細は、「OCIリリース8のSQLLIB拡張相互運用性」を参照してください。

この例では、Pro*C/C++プログラムでENABLE THREADS文を使用する方法を示しています。

EXEC SQL ENABLE THREADS;

関連項目

「CONTEXT ALLOCATE(実行可能埋込みSQL拡張機能)」

「CONTEXT FREE(実行可能埋込みSQL拡張機能)」

「CONTEXT USE(Oracle埋込みSQLディレクティブ)」

EXECUTE ... END-EXEC(実行可能埋込みSQL拡張機能)

用途

Pro*C/C++プログラムに無名PL/SQLブロックを埋め込みます。

前提条件

なし。

構文

EXECUTE...END-EXEC
図execeex.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT PL/SQLブロックが実行されるデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。この句を省略した場合、PL/SQLブロックはデフォルトのデータベースに対して実行されます。

pl/sql_block PL/SQLブロックの作成方法など、PL/SQLの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
END-EXEC このキーワードは、Oracleプリコンパイラ・プログラムが使用するプログラミング言語に関係なく、埋込みPL/SQLブロックの後に配置する必要があります。キーワードEND-EXECの後には、C/C++の文終了記号「;」を付ける必要があります。

使用上の注意

Pro*C/C++では埋込みPL/SQLブロックが1つの埋込みSQL文のように扱われるため、PL/SQLブロックはプログラムでSQL文を埋め込める場所であればどこでも埋込みが可能です。Oracleプリコンパイラ・プログラムでのPL/SQLブロックの埋込みの詳細は、第7章「埋込みPL/SQL」を参照してください。

このEXECUTE文をPro*C/C++プログラムに使用すると、PL/SQLブロックがプログラムに埋め込まれます。

EXEC SQL EXECUTE 
    BEGIN 
        SELECT ename, job, sal 
            INTO :emp_name:ind_name, :job_title, :salary 
            FROM emp 
            WHERE empno = :emp_number; 
        IF :emp_name:ind_name IS NULL 
            THEN RAISE name_missing; 
        END IF; 
    END; 
END-EXEC; 

関連項目

「EXECUTE IMMEDIATE(実行可能埋込みSQL)」

EXECUTE(実行可能埋込みSQL)

用途

Oracle動的SQLでは、埋込みSQLのPREPARE文によって準備済のDELETE文、INSERT文またはUPDATE文、あるいはPL/SQLブロックを実行します。ANSI動的SQL方法4については、「EXECUTE DESCRIPTOR(実行可能埋込みSQL)」を参照してください。

前提条件

埋込みSQLのPREPARE文を使用して、事前にSQL文またはPL/SQLブロックを準備する必要があります。

構文

EXECUTE
図execo.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
FOR :array_size 処理する行を含むホスト変数。

処理する行数。

FOR integer USING句に配列ホスト変数が含まれる場合に文が実行される回数を制限します。この句を省略した場合、Oracleでは最小の配列の各コンポーネントに対して1回ずつ文が実行されます。
statement_id 実行するSQL文またはPL/SQLブロックに対応付けられているプリコンパイラ識別子。プリコンパイラ識別子を文またはPL/SQLブロックに対応付けるには、埋込みSQLのPREPARE文を使用します。
USING DESCRIPTOR SQLDA_descriptor Oracle識別子を使用します。ANSI識別子(INTO句)とともに使用することはできません。
USING オプションの標識変数を使用してホスト変数のリストを指定します。Oracleでは実行する文にこれらの変数が入力変数として代入されます。ホスト変数および標識変数は、すべてスカラーか、すべて配列である必要があります。
host_variable ホスト変数。
indicator_variable 標識変数。

使用上の注意

この文の詳細は、Oracleバージョンの第13章「Oracle動的SQL」を参照してください。

この例では、Pro*C/C++プログラムでEXECUTE文を使用する方法を示しています。

EXEC SQL PREPARE my_statement 
    FROM :my_string; 
EXEC SQL EXECUTE my_statement
    USING :my_var; 

関連項目

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「PREPARE(実行可能埋込みSQL)」

EXECUTE DESCRIPTOR(実行可能埋込みSQL)

用途

ANSI SQL方法4では、埋込みSQLのPREPARE文によって準備済のDELETE文、INSERT文またはUPDATE文、あるいはPL/SQLブロックを実行します。

前提条件

埋込みSQLのPREPARE文を使用して、事前にSQL文またはPL/SQLブロックを準備する必要があります。

構文

EXECUTE DESCRIPTOR
図execa.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
FOR :array_size 処理する行を含むホスト変数。

処理する行数。

FOR integer 文が実行される回数を制限します。Oracleでは、最小の配列の各コンポーネントに対して1回ずつ文が実行されます。
statement_id 実行するSQL文またはPL/SQLブロックに対応付けられているプリコンパイラ識別子。プリコンパイラ識別子を文またはPL/SQLブロックに対応付けるには、埋込みSQLのPREPARE文を使用します。
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
USING ANSI記述子。
descriptor_name 入力記述子の名前が含まれるホスト変数。
'descriptor name' 入力記述子の名前。
INTO ANSI記述子。
descriptor_name 出力記述子の名前が含まれるホスト変数。
'descriptor name' 出力記述子の名前。
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。

使用上の注意

この文の詳細は、第14章「ANSI動的SQL」を参照してください。

ANSI動的SQL方法4では、EXECUTEのINTO句を使用して次のようにSELECTのDML RETURNING句がサポートされます。

EXEC SQL EXECUTE S2 USING DESCRIPTOR :bv1 INTO DESCRIPTOR 'SELDES' ;

関連項目

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「PREPARE(実行可能埋込みSQL)」

EXECUTE IMMEDIATE(実行可能埋込みSQL)

用途

ホスト変数を含まないDELETE文、INSERT文またはUPDATE文、あるいはPL/SQLブロックを準備し、実行します。

EXECUTE IMMEDIATE
図execi.gifの説明

前提条件

なし。

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT SQL文またはPL/SQLブロックが実行されるデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。この句を省略した場合、文またはブロックはデフォルトのデータベースに対して実行されます。

text 実行するSQL文またはPL/SQLブロックが含まれる引用符付きのテキスト・リテラル(または引用符なしのテキスト・リテラル)。

SQL文は、DELETE文、INSERT文またはUPDATE文のいずれかである必要があります。

host_string SQL文を含むホスト変数。

使用上の注意

EXECUTE IMMEDIATE文を発行すると、Oracleでは指定したSQL文またはPL/SQLブロックの解析およびエラー・チェックが行われ、実行されます。見つかったエラーは、SQLCAのSQLCODEコンポーネントに戻されます。

この文の詳細は、第13章「Oracle動的SQL」および第14章「ANSI動的SQL」を参照してください。

この例では、EXECUTE IMMEDIATE文の使用方法を示します。

EXEC SQL EXECUTE IMMEDIATE 'DELETE FROM emp WHERE empno = 9460' ;

関連項目

「EXECUTE(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

FETCH(実行可能埋込みSQL)

用途

Oracle動的SQLでは、選択リストの値がホスト変数に割り当てられ、問合せが戻した1行または複数の行が取り出されます。ANSI動的SQL方法4については、「FETCH DESCRIPTOR(実行可能埋込みSQL)」を参照してください。

前提条件

まず、OPEN文を使用してカーソルを先にオープンする必要があります。

構文

FETCH
図fetcho.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
FOR :array_size 処理する行を含むホスト変数。

処理する行数。

FOR integer 配列ホスト変数を使用する場合にフェッチする行数を制限します。この句を省略した場合、Oracleでは最小の配列を満たすのに十分な数の行がフェッチされます。
cursor DECLARE CURSOR文を使用して宣言したカーソル。FETCH文は、カーソルに対応付けられた問合せが選択した行のうちの1行を戻します。
cursor_variable カーソル変数はALLOCATE文で割り当てられます。FETCH文は、カーソル変数に対応付けられた問合せが選択した行のうちの1行を戻します。
INTO データのフェッチ先のホスト変数のリストとオプションの標識変数を指定します。これらのホスト変数および標識変数は、プログラム内で宣言されている必要があります。
host_variable データを受け取るホスト変数。
indicator_variables ホスト標識変数。
USING SQLDA_variable 前のDESCRIBE文において参照されたOracle記述子を指定します。この句は、動的埋込みSQLメソッド4のみで使用します。カーソル変数を使用している場合、USING句は適用されません。

使用上の注意

FETCH文はアクティブ・セットの行を読み込み、結果が含まれる出力変数の名前を示します。対応付けられたホスト変数がNULLの場合、インジケータの値は-1に設定されます。また、カーソルに対する最初のFETCH文は、必要に応じてアクティブ・セットの行をソートします。

出力ホスト変数のサイズは取り出された行数を示し、FOR句は値を示します。データを受け取るホスト変数は、すべてスカラーか、すべて配列である必要があります。スカラーの場合、Oracleでは1行のみフェッチされます。配列の場合、Oracleでは配列を満たすのに十分な数の行がフェッチされます。

配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleでフェッチされる行数は、次の値のうち小さい方です。

フェッチする行数は、実際に問合せを満たす行の数によってさらに限定できます。

FETCH文が、問合せで戻された行をすべて取り出さない場合、カーソルは戻された次の行に配置されます。問合せで戻された最後の行を取り出すと、その次のFETCHではエラー・コードが発生します。このエラー・コードはSQLCAのSQLCODE要素に戻されます。

FETCH文にはAT句は含まれません。カーソルによってアクセスされるデータベースは、DECLARE CURSOR文で指定する必要があります。

FETCH文では、アクティブ・セット内を前方向にのみ進めます。すでにフェッチした行に戻す場合は、カーソルを再オープンして各行を順番に取り出す必要があります。アクティブ・セットを変更する場合は、カーソルの問合せで入力ホスト変数に新しい値を割り当てて、カーソルを再オープンする必要があります。

Oracleの記述子の詳細は、「FETCH文」を参照してください。

この例では、FETCH文を示します。

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT job, sal FROM emp WHERE deptno = 30; 
EXEC SQL OPEN emp_cursor;
... 
EXEC SQL WHENEVER NOT FOUND GOTO ... 
for(;;)
    {
    EXEC SQL FETCH emp_cursor INTO :job_title1, :salary1; 
    ... 
    }

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「OPEN(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

FETCH DESCRIPTOR(実行可能埋込みSQL)

用途

選択リストの値をホスト変数に割り当てて、問合せが戻した1つまたは複数の行を取り出します。ANSI動的SQL方法4で使用されます。

前提条件

まず、OPEN文を使用してカーソルを先にオープンする必要があります。

構文

FETCH DESCRIPTOR
図fetcha.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size 処理する行を含むホスト変数。

処理する行数。

integer 配列ホスト変数を使用する場合にフェッチする行数を制限します。この句を省略した場合、Oracleでは最小の配列を満たすのに十分な数の行がフェッチされます。
cursor DECLARE CURSOR文を使用して宣言したカーソル。FETCH文は、カーソルに対応付けられた問合せが選択した行のうちの1行を戻します。
cursor_variable カーソル変数はALLOCATE文で割り当てられます。FETCH文は、カーソル変数に対応付けられた問合せが選択した行のうちの1行を戻します。
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
INTO データのフェッチ先のホスト変数のリストとオプションの標識変数を指定します。これらのホスト変数および標識変数は、プログラム内で宣言されている必要があります。
'descriptor name'

descriptor_name

出力ANSI記述子の名前。

出力記述子の名前が含まれるホスト変数。


使用上の注意

出力ホスト変数のサイズは取り出された行数を示し、FOR句は値を示します。データを受け取るホスト変数は、すべてスカラーか、すべて配列である必要があります。スカラーの場合、Oracleでは1行のみフェッチされます。配列の場合、Oracleでは配列を満たすのに十分な数の行がフェッチされます。

配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleでフェッチされる行数は、次の値のうち小さい方です。

フェッチする行数は、実際に問合せを満たす行の数によってさらに限定できます。

FETCH文が、問合せで戻された行をすべて取り出さない場合、カーソルは戻された次の行に配置されます。問合せで戻された最後の行を取り出すと、その次のFETCHではエラー・コードが発生します。このエラー・コードはSQLCAのSQLCODE要素に戻されます。

FETCH文にはAT句は含まれません。カーソルによってアクセスされるデータベースは、DECLARE CURSOR文で指定する必要があります。

FETCH文では、アクティブ・セット内を前方向にのみ進めます。すでにフェッチした行に戻す場合は、カーソルを再オープンして各行を順番に取り出す必要があります。アクティブ・セットを変更する場合は、カーソルの問合せで入力ホスト変数に新しい値を割り当てて、カーソルを再オープンする必要があります。

ANSI SQL方法4アプリケーションにはDYNAMIC=ANSIプリコンパイラ・オプションを指定します。ANSI SQL方法4アプリケーションの詳細は、「FETCH」を参照してください。

...
EXEC SQL ALLOCATE DESCRIPTOR 'output_descriptor' ;
...
EXEC SQL PREPARE S FROM :dyn_statement ;
EXEC SQL DECLARE mycursor CURSOR FOR S ;
...
EXEC SQL FETCH mycursor INTO DESCRIPTOR 'output_descriptor' ;
...

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「OPEN DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

FREE(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内のメモリーを解放します。

前提条件

メモリーが割当て済である必要があります。

データベースへの接続がアクティブである必要があります。

構文

FREE
図free.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
dbname 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。これが省略される、または空の文字列である場合は、デフォルトのデータベース接続とみなされます。
host_ptr 事前にALLOCATEで割り当てられていたホスト変数ポインタ。
ind_ptr インジケータ・ポインタ。

使用上の注意

接続が切り離されると、オブジェクト・キャッシュに割り当てられているメモリーはすべて自動的に解放されます。詳細は、「FREE」を参照してください。

EXEC SQL FREE :ptr ;

関連項目

「ALLOCATE(実行可能埋込みSQL拡張機能)」

「CACHE FREE ALL(実行可能埋込みSQL拡張機能)」

GET DESCRIPTOR(実行可能埋込みSQL)

用途

SQL記述子領域からホスト変数についての情報を取得します。

前提条件

値構文でのみ使用します。

構文

GET DESCRIPTOR
図getdesc.gifの説明

item_nameは次のうちの1つになります。

item_nameの選択肢
図getdnc.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size 処理する行を含むホスト変数。
integer 処理する行数。
descriptor_name

'descriptor name'

割り当てられたANSI記述子の名前が含まれるホスト変数。

割り当てられたANSI記述子の名前。

GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
host_var = COUNT 入力変数または出力変数の合計数を含むホスト変数。
integer 入力変数または出力変数の合計数。
VALUE :host_integer 参照される入力または出力変数の位置を含むホスト変数。
VALUE integer 参照される入力または出力変数の位置。
host_var 項目の値を受け取るホスト変数。
item_name item_nameの例は、表14-4「GET DESCRIPTORの記述子項目名の定義」および表14-5「Oracle拡張機能により追加されたGET DESCRIPTOR」を参照してください。

使用上の注意

DYNAMIC=ANSIプリコンパイラ・オプションを使用します。配列サイズ句は、DATA、RETURNED_LENGTHおよびINDICATOR項目名で使用できます。「GET DESCRIPTOR」を参照してください。

EXEC SQL GET DESCRIPTOR GLOBAL 'mydesc' :mydesc_num_vars = COUNT ;

関連項目

「ALLOCATE DESCRIPTOR(実行可能埋込みSQL)」

「DEALLOCATE DESCRIPTOR(埋込みSQL文)」

「SET DESCRIPTOR(実行可能埋込みSQL)」

INSERT(実行可能埋込みSQL)

用途

表またはビューの実表に行を追加します。

前提条件

表に行を挿入するには、その表が自分のスキーマ内にあるか、またはその表に対してINSERTの権限を持つ必要があります。

ビューの実表に行を挿入するには、ビューが属するスキーマの所有者が、その実表に対してINSERTの権限を持つ必要があります。また、ビューが自分のスキーマ以外のスキーマ内にある場合は、ビューに対してINSERTの権限を持つ必要があります。

INSERT ANY TABLEシステム権限を使用すると、どの表またはビューの実表にも行を挿入できます。

構文

INSERT
図insert.gifの説明

DML RETURNING句は次のとおりです。

INSERTのDML RETUNING句
図return.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT INSERT文を実行するデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 値がdb_nameのホスト変数。この句を省略した場合、INSERT文はデフォルトのデータベースについて実行されます。

FOR :host_integer

integer

VALUES句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。

この句を省略した場合、Oracleでは最小の配列の各コンポーネントに対して1回ずつ文が実行されます。

schema 表またはビューが含まれるスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。
table

view

行を挿入する表の名前。

ビューを指定すると、Oracleではそのビューの実表に行が挿入されます。

db_link 表またはビューがあるリモート・データベースへのデータベース・リンクの完全名または部分名。データベース・リンクの参照の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

リモートの表またはビューに行を挿入できるのは、分散オプションでOracleを使用している場合のみです。

dblinkを省略した場合、Oracleでは表またはビューがローカル・データベース内にあるとみなされます。

part_name 表のパーティションの名前。
column このリストから表の1列を省略すると、挿入行のその列値には、表の作成時に指定される列のデフォルト値が使用されます。列のリストを完全に省略した場合は、VALUES句または問合せによって、表のすべての列の値を指定する必要があります。
VALUES 表またはビューに挿入される値の行を指定します。構文については、『Oracle Database SQL言語リファレンス』を参照してください。式には、ホスト変数とオプションの標識変数を使用できます。VALUES句では、列のリストの各列に式を指定する必要があります。
subquery 表に挿入される行を戻す副問合せ。この副問合せの選択リストの列数は、INSERT文の列のリストの列数と同じである必要があります。副問合せの構文については、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。
DML RETURNING句 「DML RETURNING句」を参照してください。

使用上の注意

WHERE句内のホスト変数は、すべてスカラーか、すべて配列である必要があります。変数がスカラーの場合、OracleではINSERT文が1回実行されます。変数が配列の場合、OracleではINSERT文が各配列コンポーネント・セットについて1回ずつ実行され、1行ずつ挿入されます。

WHERE句の配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleで文が実行される回数は、次の値のうち小さい方によって決まります。

この文の詳細は、「INSERT文」を参照してください。

例I

この例では、埋込みSQL INSERT文の使用方法を示しています。

EXEC SQL 
     INSERT INTO emp (ename, empno, sal) 
     VALUES (:ename, :empno, :sal) ; 

例II

この例では、副問合せを使用した埋込みSQLのINSERT文を示します。

EXEC SQL 
   INSERT INTO new_emp (ename, empno, sal) 
   SELECT ename, empno, sal FROM emp
   WHERE deptno = :deptno ; 

関連項目

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

LOB APPEND(実行可能埋込みSQL拡張機能)

用途

LOBの最後に別のLOBを追加します。

前提条件

LOBバッファリングは使用可能である必要があります。宛先LOBは初期化されている必要があります。

構文

LOB APPEND
図lobapp.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「APPEND」を参照してください。

関連項目

他のLOB文を参照してください。

LOB ASSIGN(実行可能埋込みSQL拡張機能)

用途

LOBまたはBFILEロケータを別のロケータに割り当てます。

構文

LOB ASSIGN
図lobass.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「ASSIGN」を参照してください。

関連項目

他のLOB文を参照してください。

LOB CLOSE(実行可能埋込みSQL拡張機能)

用途

LOBまたはBFILEをクローズします。

構文

LOB CLOSE
図lobclose.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「CLOSE」を参照してください。

関連項目

他のLOB文を参照してください。

LOB COPY(実行可能埋込みSQL拡張機能)

用途

LOB値の全部または一部を別のLOBにコピーします。

構文

LOB COPY
図lobcop.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「COPY」を参照してください。

関連項目

他のLOB文を参照してください。

LOB CREATE TEMPORARY(実行可能埋込みSQL拡張機能)

用途

テンポラリLOBを作成します。

構文

LOB CREATE TEMPORARY
図lobcreat.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「CREATE TEMPORARY」を参照してください。

関連項目

他のLOB文を参照してください。

LOB DESCRIBE(実行可能埋込みSQL拡張機能)

用途

LOBから属性を取得します。

構文

LOB DESCRIBE
図lobdesc.gifの説明

attribは次のとおりです。

attrib
図lobatt.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「DESCRIBE」を参照してください。

関連項目

他のLOB文を参照してください。

LOB DISABLE BUFFERING(実行可能埋込みSQL拡張機能)

用途

LOBバッファリングを使用禁止にします。

構文

LOB DISABLE BUFFERING
図lobdisab.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「DISABLE BUFFERING」を参照してください。

関連項目

他のLOB文を参照してください。

LOB ENABLE BUFFERING(実行可能埋込みSQL拡張機能)

用途

LOBバッファリングを使用可能にします。

構文

LOB ENABLE BUFFERING
図lobenab.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「ENABLE BUFFERING」を参照してください。

関連項目

他のLOB文を参照してください。

LOB ERASE(実行可能埋込みSQL拡張機能)

用途

LOBデータの任意の値の消去を任意のオフセットから開始します。

構文

LOB ERASE
図loberas.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「ERASE」を参照してください。

関連項目

他のLOB文を参照してください。

LOB FILE CLOSE ALL(実行可能埋込みSQL拡張機能)

用途

現行のセッションでオープンしているすべてのBFILEをクローズします。

構文

LOB FILE CLOSE ALL
図lobficl.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「FILE CLOSE ALL」を参照してください。

関連項目

他のLOB文を参照してください。

LOB FILE SET(実行可能埋込みSQL拡張機能)

用途

BFILEロケータにDIRECTORYおよびFILENAMEを設定します。

構文

LOB FILE SET
図lobfise.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「FILE SET」を参照してください。

関連項目

他のLOB文を参照してください。

LOB FLUSH BUFFER(実行可能埋込みSQL拡張機能)

用途

データベース・サーバーにLOBバッファを書き込みます。

構文

LOB FLUSH BUFFER
図lobflbuf.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「FLUSH BUFFER」を参照してください。

関連項目

他のLOB文を参照してください。

LOB FREE TEMPORARY(実行可能埋込みSQL拡張機能)

用途

LOBロケータの一時領域を解放します。

構文

LOB FREE TEMPORARY
図lobfrtem.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「FREE TEMPORARY」を参照してください。

関連項目

他のLOB文を参照してください。

LOBLOAD(実行可能埋込みSQL拡張機能)

用途

BFILEの全部または一部を内部LOBにコピーします。

構文

LOB LOAD
図loblofr.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「LOAD FROM FILE」を参照してください。

関連項目

他のLOB文を参照してください。

LOB OPEN(実行可能埋込みSQL拡張機能)

用途

読込みまたは読取り/書込みアクセスで使用するLOBまたはBFILEをオープンします。

構文

LOB OPEN
図lobopen.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「OPEN」を参照してください。

関連項目

他のLOB文を参照してください。

LOB READ(実行可能埋込みSQL拡張機能)

用途

LOBまたはBFILEの全部または一部をバッファに読み込みます。

構文

LOB READ
図lobread.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「READ」を参照してください。

関連項目

他のLOB文を参照してください。

LOB TRIM(実行可能埋込みSQL拡張機能)

用途

LOB値を切り捨てます。

構文

LOB TRIM
図lobtrim.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「TRIM」を参照してください。

関連項目

他のLOB文を参照してください。

LOB WRITE(実行可能埋込みSQL拡張機能)

用途

バッファの内容をLOBに書き込みます。

構文

LOB WRITE
図lobwri.gifの説明

使用上の注意

使用上の注意、キーワード、パラメータおよび例は、「WRITE」を参照してください。

関連項目

他のLOB文を参照してください。

OBJECT CREATE(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内に参照可能なオブジェクトを作成します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT CREATE
図objcrea.gifの説明

tabは次のとおりです。

tab
図objtab.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT CREATE」を参照してください。

person *pers_p;
person_ind *pers_ind;
person_ref *pers_ref;
...
EXEC SQL OBJECT CREATE :pers_p:pers_ind TABLE PERSON_TAB
          RETURNING REF INTO :pers_ref ;

関連項目

この付録における他のすべてのOBJECT文を参照してください。

OBJECT DELETE(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内の永続オブジェクトまたはオブジェクトの配列を削除済としてマークします。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT DELETE
図objdel.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT DELETE」を参照してください。

customer *cust_p;
...
EXEC SQL OBJECT DELETE :cust_p;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。永続オブジェクトの場合、この文はオブジェクト・キャッシュ内のオブジェクトまたはオブジェクトの配列を削除済としてマーク設定します。

OBJECT DEREF(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内にオブジェクトまたはオブジェクトの配列を保持します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT DEREF
図objder.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT DEREF」を参照してください。

person *pers_p;
person_ref *pers_ref;
...
/* Pin the person REF, returning a pointer to the person object */
EXEC SQL OBJECT DEREF :pers_ref INTO :pers_p;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。「ALLOCATE(実行可能埋込みSQL拡張機能)」を参照してください。

OBJECT FLUSH(実行可能埋込みSQL拡張機能)

用途

更新済、削除済または作成済としてマーク設定された永続オブジェクトを、サーバーに反映します。この処理はフラッシュと呼ばれます。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT FLUSH
図objflu.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT FLUSH」を参照してください。

person *pers_p;
...
EXEC SQL OBJECT DELETE :pers_p;
/* Flush the changes, effectively deleting the person object */
EXEC SQL OBJECT FLUSH :pers_p;
/* Finally, free all object cache memory and logoff */
EXEC SQL OBJECT CACHE FREE ALL;
EXEC SQL COMMIT WORK RELEASE;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。

OBJECT GET(実行可能埋込みSQL拡張機能)

用途

オブジェクト型の属性をネイティブなC言語のデータ型に変換します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT GET
図objget.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT GET」を参照してください。

person *pers_p;
struct { char lname[21], fname[21]; int age; } pers;
...
/* Convert object types to native C types */
EXEC SQL OBJECT GET lastname, firstname, age FROM :pers_p INTO :pers;
printf("Last Name: %s\nFirstName: %s\nAge: %d\n",
        pers.lname, pers.fname, pers.age );

関連項目

この付録にある他のすべてのOBJECT文を参照してください。

OBJECT RELEASE(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内のオブジェクトを解放します。オブジェクトが確保されず、更新もされなければ、暗黙的な解放の対象になります。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT RELEASE
図objrel.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT RELEASE」を参照してください。

person *pers_p;
...
EXEC SQL OBJECT RELEASE :pers_p;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。

OBJECT SET(実行可能埋込みSQL拡張機能)

用途

永続オブジェクトの属性を更新し、オブジェクトのフラッシュ時、またはキャッシュのフラッシュ時にサーバーへの書込み対象にします。

一時オブジェクトの属性を更新します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT SET
図objset.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT FLUSH」を参照してください。

person *pers_p;
struct {int num; char street[61], city[31], state[3], zip[11];} addr1;
...
addr1.num = 500;
strcpy((char *)addr1.street , (char *)"Oracle Parkway");
strcpy((char *)addr1.city,    (char *)"Redwood Shores");
strcpy((char *)addr1.state,   (char *)"CA");
strcpy((char *)addr1.zip,     (char *)"94065");

/* Convert native C types to object types */
EXEC SQL OBJECT SET :pers_p->addr TO :addr1;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。

OBJECT UPDATE(実行可能埋込みSQL拡張機能)

用途

オブジェクト・キャッシュ内の永続オブジェクトまたはオブジェクトの配列を更新済としてマーク設定します。

前提条件

プリコンパイラ・オプションOBJECTSをYESに設定する必要があります。INTYPEオプションでは、OTTによって生成される型ファイルを指定する必要があります。OTTによって生成されるヘッダー・ファイルをプログラムにインクルードしてください。

構文

OBJECT UPDATE
図objupd.gifの説明

使用上の注意

使用上の注意、キーワードおよびパラメータは、「OBJECT UPDATE」を参照してください。

person *pers_p;
...
/* Mark as updated */
EXEC SQL OBJECT UPDATE :pers_p;

関連項目

この付録にある他のすべてのOBJECT文を参照してください。

OPEN(実行可能埋込みSQL)

用途

対応付けられた問合せを評価し、USING句が示すホスト変数名を問合せのWHERE句に代入して、カーソルをオープンします。ANSI動的SQL方法4バージョンについては、「OPEN DESCRIPTOR(実行可能埋込みSQL)」を参照してください。

前提条件

カーソルは、オープンする前に埋込みSQLのDECLARE CURSOR文を使用して宣言する必要があります。

構文

OPEN
図openo.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size

integer

処理する行を含むホスト変数。

処理する行数。

cursor (事前に宣言された)オープンするカーソル。
host_variable カーソルに対応付けられている文に代入されるオプションの標識変数を使用して、ホスト変数を指定します。

ANSI識別子(INTO句)とともに使用することはできません。

DESCRIPTOR SQLDA_descriptor 対応付けられた問合せのWHERE句に代入するホスト変数を表すOracle記述子を指定します。記述子は、DESCRIBE文を使用して事前に初期化されている必要があります。代入は、位置に基づきます。この文で指定するホスト変数名は、対応付けられた問合せの変数名と異なってもかまいません。

ANSI識別子(INTO句)とともに使用することはできません。


使用上の注意

OPEN文は、行のアクティブ・セットを定義し、アクティブ・セットの最初の行の直前でカーソルを初期化します。OPEN時のホスト変数の値が文に代入されます。この文は、実際には行を取り出しません。行はFETCH文を使用して取り出されます。

カーソルを一度オープンすると、入力ホスト変数はカーソルを再オープンするまで再テストされません。入力ホスト変数およびアクティブ・セットを変更するには、カーソルを再オープンする必要があります。

プログラムを開始するときまたはCLOSE文を使用してカーソルを明示的にクローズした後には、プログラム内のすべてのカーソルがクローズ状態になります。

カーソルはクローズせずに再オープンできます。この文の詳細は、「INSERT文」を参照してください。

この例では、Pro*C/C++プログラムでOPEN文を使用する方法を示しています。

EXEC SQL DECLARE emp_cursor CURSOR FOR 
    SELECT ename, empno, job, sal 
    FROM emp 
    WHERE deptno = :deptno; 
EXEC SQL OPEN emp_cursor;

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE STATEMENT(埋込みSQLディレクティブ)」

「FETCH(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

OPEN DESCRIPTOR(実行可能埋込みSQL)

用途

対応付けられた問合せを評価し、USING句が示すホスト変数名を問合せのWHERE句に代入して、カーソルをオープンします(ANSI動的SQL方法4の場合)。INTO句は出力記述子を示します。

前提条件

カーソルは、オープンする前に埋込みSQLのDECLARE CURSOR文を使用して宣言する必要があります。

構文

OPEN DESCRIPTOR
図opena.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size

integer

処理する行を含むホスト変数。

処理する行数。

cursor (事前に宣言された)オープンするカーソル。
USING DESCRIPTOR ANSI入力記述子を指定します。
descriptor_name ANSI記述子の名前が含まれるホスト変数。
'descriptor name' ANSI記述子の名前。
INTO DESCRIPTOR ANSI出力記述子を指定します。
descriptor_name ANSI記述子の名前が含まれるホスト変数。
'descriptor name' ANSI記述子の名前。
GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。

使用上の注意

プリコンパイラ・オプションDYNAMICをANSIに設定します。

OPEN文は、行のアクティブ・セットを定義し、アクティブ・セットの最初の行の直前でカーソルを初期化します。OPEN時のホスト変数の値がSQL文に代入されます。この文は、実際には行を取り出しません。行はFETCH文を使用して取り出されます。

カーソルを一度オープンすると、入力ホスト変数はカーソルを再オープンするまで再テストされません。入力ホスト変数およびアクティブ・セットを変更するには、カーソルを再オープンする必要があります。

プログラムを開始するときまたはCLOSE文を使用してカーソルを明示的にクローズした後には、プログラム内のすべてのカーソルがクローズ状態になります。

カーソルはクローズせずに再オープンできます。この文の詳細は、「INSERT文」を参照してください。

char dyn_statement[1024] ;
...
EXEC SQL ALLOCATE DESCRIPTOR 'input_descriptor' ;
EXEC SQL ALLOCATE DESCRIPTOR 'output descriptor'
...
EXEC SQL PREPARE S FROM :dyn_statement ;
EXEC SQL DECLARE C CURSOR FOR S ;
...
EXEC SQL OPEN C USING DESCRIPTOR 'input_descriptor' ;
...

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「FETCH DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

PREPARE(実行可能埋込みSQL)

用途

ホスト変数により指定されるSQL文またはPL/SQLブロックを解析し、それを識別子に対応付けます。

前提条件

なし。

構文

PREPARE
図prepare.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
statement_id 準備済のSQL文またはPL/SQLブロックに対応付ける識別子。この識別子がすでに別の文またはブロックに割り当てられている場合は、以前の割当てが置き換えられます。
db_name 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。これが省略される、または空の文字列である場合は、デフォルトのデータベース接続とみなされます。
host_variable データベース接続の名前を含むホスト変数。
text 準備するSQL文またはPL/SQLブロックを含む文字列リテラル。
select_command 選択文。

使用上の注意

:host_stringまたはtextの変数はすべてプレースホルダです。実際のホスト変数名は、OPEN文のUSING句(入力ホスト変数)、またはFETCH文のINTO句(出力ホスト変数)で割り当てます。

SQL文は一度準備すれば、何回でも実行できます。詳細は、「PREPARE」を参照してください。

この例では、Pro*C/C++の埋込みSQLプログラムにおけるPREPARE文の使用方法を示します。

EXEC SQL PREPARE my_statement FROM :my_string; 
EXEC SQL EXECUTE my_statement;

関連項目

「CLOSE(実行可能埋込みSQL)」

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「FETCH DESCRIPTOR(実行可能埋込みSQL)」

「OPEN(実行可能埋込みSQL)」

REGISTER CONNECT(実行可能埋込みSQL拡張機能)

用途

外部CプロシージャをPro*C/C++アプリケーションからコールできるようにします。

前提条件

なし。

構文

REGISTER CONNECT
図regconn.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
ext_proc_ctxt PL/SQLによってプロシージャに渡される外部プロシージャ・コンテキスト。OCIExtProcContextへのタイプ・ポインタです。
context 戻されるランタイム・コンテキスト。sql_context型になります。現在の設定は、デフォルト(グローバル)・コンテキストです。

使用上の注意

外部プロシージャを作成する方法および有効な制限の詳細は、「外部プロシージャ」を参照してください。

void myfunction(epctx)
OCIExtProcContext *epctx;
sql_context context;
...
{
EXEC SQL REGISTER CONNECT USING :epctx ;
EXEC SQL USE :context;
...

関連項目

なし

ROLLBACK(実行可能埋込みSQL)

用途

現行のトランザクションで実行した作業を取り消します。

この文は、インダウトの分散トランザクションの処理を手動で取り消すときにも使用できます。

前提条件

現行のトランザクションをロールバックするには、権限は必要ありません。

自分でコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE TRANSACTIONのシステム権限が必要です。他のユーザーがコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE ANY TRANSACTIONのシステム権限が必要です。

構文

ROLLBACK
図rollb.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT セーブポイントが作成されるデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。これが省略される、または空の文字列である場合は、デフォルトのデータベース接続とみなされます。

host_variable: データベース接続の名前を含むホスト変数。この句を省略した場合、セーブポイントはデフォルトのデータベースに対して作成されます。

WORK オプションで、ANSIの互換性のために提供されます。
TO 指定したセーブポイントまで現行のトランザクションをロールバックします。この句を省略した場合、ROLLBACK文ではトランザクション全体がロールバックされます。
FORCE インダウトの分散トランザクションを手動でロールバックします。トランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含むテキストにより指定します。これらのトランザクションのIDを検索するには、データ・ディクショナリ・ビューDBA_2PC_PENDINGに問い合せます。

ROLLBACK文でのFORCE句の使用はPL/SQLではサポートされていません。

RELEASE リソースをすべて解放し、アプリケーションをデータベースから切断します。RELEASE句は、SAVEPOINT句およびFORCE句とは併用できません。
savepoint ロールバックするセーブポイント

使用上の注意

トランザクション(論理的な作業単位)は、Oracleで1つの単位として扱われる一連のSQL文です。トランザクションは、COMMIT文、ROLLBACK文またはデータベースへの接続の後の、最初の実行SQL文から始まります。トランザクションは、COMMIT文、ROLLBACK文、またはデータベースからの切離し(意図的または不本意な切離し)により終了します。Oracleでは、データ定義言語文の処理前および処理後に暗黙的なCOMMIT文が発行されます。

TO SAVEPOINT句を指定せずにROLLBACK文を使用すると、次の処理が実行されます。

TO SAVEPOINT句を指定してROLLBACK文を使用すると、次の処理が実行されます。

アプリケーション・プログラムでは、COMMIT文またはROLLBACK文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットしなかった場合にプログラムが異常終了すると、Oracleでは最後のコミットされていないトランザクションがロールバックされます。

例I

次の文により、現行のトランザクション全体がロールバックされます。

EXEC SQL ROLLBACK; 

例II

次の文は現行のトランザクションをセーブポイントSP5までロールバックします。

EXEC SQL ROLLBACK TO SAVEPOINT sp5;

分散トランザクション

Oracleで分散オプションを使用すると、分散トランザクション、または複数データベース上のデータを変更するトランザクションが可能になります。分散トランザクションをコミットまたはロールバックするには、他のトランザクションと同じようにCOMMIT文またはROLLBACK文を発行するのみで済みます。

分散トランザクションのコミット・プロセス中にネットワーク障害が発生すると、トランザクションの状態が不明、つまりインダウトになる可能性があります。そのトランザクションに関連する他のデータベースの管理者に問い合せて、ローカル・データベースのトランザクションを手動でコミットするか、ロールバックするかを決定できます。ローカル・データベースのトランザクションを手動でロールバックするには、FORCE句を指定してROLLBACK文を発行します。

インダウトのトランザクションを手動でセーブポイントまでロールバックすることはできません。

FORCE句を指定したROLLBACK文では、指定したトランザクションのみがロールバックされます。このような文は、現行のトランザクションには影響しません。

例III

次の文はインダウトの分散トランザクションを手動でロールバックします。

EXEC SQL
    ROLLBACK WORK
    FORCE '25.32.87' ;

関連項目

「COMMIT(実行可能埋込みSQL)」

「SAVEPOINT(実行可能埋込みSQL)」

SAVEPOINT(実行可能埋込みSQL)

用途

後でロールバックする位置をトランザクション内に指定します。

前提条件

なし。

構文

SAVEPOINT
図savep.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT セーブポイントが作成されるデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。

この句を省略した場合、セーブポイントはデフォルトのデータベースに対して作成されます。

savepoint 作成するセーブポイントの名前。

使用上の注意

この文の詳細は、「SAVEPOINT文の使用」を参照してください。

この例では、埋込みSQL SAVEPOINT文の使用方法を示しています。

EXEC SQL SAVEPOINT save3;

関連項目

「COMMIT(実行可能埋込みSQL)」

「ROLLBACK(実行可能埋込みSQL)」

SELECT(実行可能埋込みSQL)

用途

選択した値をホスト変数に割り当てて、1つ以上の表、ビューまたはスナップショットからデータを取り出します。

前提条件

表またはスナップショットからデータを選択するには、表またはスナップショットが自分のスキーマ内にあるか、あるいは表またはスナップショットに対してSELECTの権限を持つ必要があります。

ビューの実表から行を選択するには、ビューが属するスキーマの所有者が、実表に対してSELECTの権限を持つ必要があります。また、ビューが自分のスキーマ以外のスキーマ内にある場合は、ビューに対してSELECTの権限を持つ必要があります。

SELECT ANY TABLEのシステム権限を使用すると、すべての表、スナップショット、ビューの実表からデータを選択できます。

構文

SELECT
図select.gifの説明

SELECT
図select_b.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT SELECT文の発行先のデータベースを識別します。次のいずれかを使用してデータベースを指定します。

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。この句を省略した場合、SELECT文はデフォルトのデータベースに対して発行されます。

select_list 非埋込みSELECT文と同じです。ただし、リテラルのかわりにホスト変数を使用できます。
INTO SELECT文が戻すデータを受け取る出力ホスト変数とオプションの標識変数を指定します。これらの変数は、すべてスカラーか、すべて配列である必要があります。ただし、配列は同じサイズでなくてもかまいません。
WHERE 条件がTRUEの行のみが戻されるように制限します。条件の構文については、『Oracle Database SQL言語リファレンス』を参照してください。条件には、ホスト変数は使用できますが、標識変数は使用できません。これらのホスト変数は、スカラーと配列のどちらでもかまいません。

その他のキーワードとパラメータは、非埋込みSQLのSELECT文と同じです。ORDER BY句のデフォルトは、昇順を示すASCです。


使用上の注意

WHERE句の条件を満たす行が存在しない場合、行は取り出されず、OracleではSQLCAのSQLCODEコンポーネントを使用してエラー・コードが戻されます。

DELETE文でコメントを使用して、指示やヒントをオプティマイザに渡すことができます。オプティマイザはヒントを使用して文の実行計画を選択します。ヒントの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

この例では、埋込みSQL SELECT文の使用方法を示しています。

EXEC SQL SELECT ename, sal + 100, job 
    INTO :ename, :sal, :job 
    FROM emp 
    WHERE empno = :empno; 

関連項目

「DECLARE CURSOR(埋込みSQLディレクティブ)」

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

「EXECUTE(実行可能埋込みSQL)」

「FETCH(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

SET DESCRIPTOR(実行可能埋込みSQL)

用途

このANSI動的SQL文は、ホスト変数からの情報を記述子領域に設定するために使用します。

前提条件

DESCRIBE DESCRIPTOR文の後に使用します。

構文

SET DESCRIPTOR
図setdesc.gifの説明

item_nameは次のうちの1つになります。

item_name
図setdnc.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
array_size

integer

処理する行を含むホスト変数。

処理する行数。配列サイズ句は、DATA、RETURNED_LENGTHおよびINDICATOR項目名でのみ使用できます。

GLOBAL | LOCAL GLOBALはアプリケーション・スコープを意味し、LOCAL(デフォルト)はファイル・スコープを意味します。
descriptor_name

'descriptor name'

割り当てられたANSI記述子の名前が含まれるホスト変数。

割り当てられたANSI記述子の名前。

COUNT 入力変数または出力変数の数。
VALUE 参照されるホスト変数の位置。
item_name item_namesのリストおよびその説明は、表14-6「SET DESCRIPTORの記述子項目名」および表14-7「SET DESCRIPTORの記述子項目名に対するOracle拡張機能」を参照してください。
host_integer

integer

項目またはCOUNTまたはVALUEの設定に使用するホスト変数。

COUNTまたはVALUEの設定に使用する整数。

host_var 記述子項目の設定に使用するホスト変数。
REF 使用する参照セマンティクス。RETURNED_LENGTH、DATAおよびINDICATOR項目名にかぎり使用できます。

RETURNED_LENGTHの設定に使用する必要があります。


使用上の注意

DYNAMIC=ANSIプリコンパイラ・オプションを使用します。

クライアント側Unicodeサポートには、CHARACTER_SET_NAMEをUTF16に設定します。

記述子項目名の表などの詳細は、「SET DESCRIPTOR」を参照してください。

EXEC SQL SET DESCRIPTOR GLOBAL :mydescr COUNT = 3 ;

関連項目

「ALLOCATE DESCRIPTOR(実行可能埋込みSQL)」

「DEALLOCATE DESCRIPTOR(埋込みSQL文)」

「DESCRIBE(実行可能埋込みSQL拡張機能)」

「GET DESCRIPTOR(実行可能埋込みSQL)」

「PREPARE(実行可能埋込みSQL)」

TYPE(Oracle埋込みSQLディレクティブ)

用途

ユーザー定義型の同値化を行うか、外部データ型をユーザー定義のデータ型に同値化することで、外部データ型をホスト変数のクラス全体に割り当てます。

前提条件

ユーザー定義のデータ型は、埋込みSQLプログラムで事前に宣言する必要があります。

構文

TYPE
図type.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
type 外部データ型と同値化するユーザー定義データ型。
datatype プリコンパイラによって認識される内部データ型ではない外部データ型。データ型には、長さ、精度または位取りを含めることができます。この外部データ型は、ユーザー定義型と同値化された後に、型が割り当てられているホスト変数すべてに割り当てられます。外部データ型のリストは、「Oracleのデータ型」を参照してください。
REFERENCE 同値化した型をポインタ型にします。

使用上の注意

ユーザー定義型の同値化は、データ型の同値化の一種です。Pro*C/C++プログラムでは、ユーザー定義型を同値化するには、埋込みSQLのTYPE文を使用する必要があります。データ型の同値化は、次のいずれかの目的で使用します。

Pro*C/C++では、VARCHARおよびVARRAW配列がワード整列されているものとみなされます。配列型をVARCHARまたはVARRAWデータ型に同値化する場合は、長さ+2が4で割り切れる数になっていることを確認してください。

Pro*C/C++では、ホスト変数の同値化のための埋込みSQL VAR文もサポートされています。詳細は、「ユーザー定義型同値化」を参照してください。

例I

この例では、Pro*C/C++のプリコンパイラ・プログラムにおける埋込みSQL TYPE文を示します。

struct screen {
    short len; 
    char  buff[4002];
}; 

typedef struct screen graphics; 

    EXEC SQL TYPE graphics IS VARRAW(4002); 
    graphics crt;  -- host variable of type graphics 
    ... 

関連項目

「VAR(Oracle埋込みSQLディレクティブ)」

UPDATE(実行可能埋込みSQL)

用途

表またはビューの実表内の既存値を変更します。

前提条件

表またはスナップショットの値を更新するには、表が自分のスキーマ内にあるか、または表に対してUPDATEの権限を持つ必要があります。

ビューの実表の値を更新するには、ビューが属するスキーマの所有者が、実表に対してUPDATEの権限を持つ必要があります。また、ビューが自分のスキーマ以外のスキーマ内にある場合は、ビューに対してUPDATEの権限を持つ必要があります。

UPDATE ANY TABLEのシステム権限により、すべての表またはビューの実表の値も更新できます。

構文

UPDATE
図update.gifの説明

DML RETURNING句は次のとおりです。

UPDATEのDML RETURNING句
図return.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
AT UPDATE文の発行先のデータベースを識別します。次のいずれかを使用してデータベースを指定します。

dbname: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 事前に宣言したdb_nameの値を持つホスト変数。

この句を省略した場合、UPDATE文はデフォルトのデータベースに対して発行されます。

FOR :host_integer

integer

SET句およびWHERE句が配列ホスト変数を含む場合に、UPDATE文を実行する回数を制限します。この句を省略すると、Oracleでは最小の配列の各コンポーネントについて1回ずつ文が実行されます。
schema 表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。
table、view 更新する表の名前。ビューを指定すると、Oracleではそのビューの実表が更新されます。
dblink 表またはビューがあるリモート・データベースへのデータベース・リンクの完全名または部分名。データベース・リンクの参照の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。データベース・リンクを使用してリモートの表またはビューを更新できるのは、Oracleで分散オプションを使用している場合のみです。
part_name 表のパーティションの名前。
column 表またはビューで更新する列の名前。SET句の表の列を省略すると、その列の値は変更されません。
expr 対応する列に割り当てる新しい値。この式には、ホスト変数およびオプションの標識変数を含めることができます。exprの構文は、『Oracle Database SQL言語リファレンス』を参照してください。
subquery_1 対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。
subquery_2 対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。
WHERE 更新される表またはビューの行を指定します。
condition

CURRENT OF

この条件がTRUEの行のみを更新します。条件には、ホスト変数およびオプションの標識変数を使用できます。条件の構文は、『Oracle Database SQL言語リファレンス』を参照してください。

カーソルによって最後にフェッチされた行のみを更新します。結合を実行するSELECT文にカーソルを対応付けるには、FOR UPDATE句で明示的に1つの表のみをロックする他に方法はありません。

この句を完全に省略した場合、表またはビューのすべての行が更新されます。

DML RETURNING句 「DML RETURNING句」を参照してください。

使用上の注意

SET句およびWHERE句のホスト変数は、すべてスカラーか、すべて配列である必要があります。変数がスカラーの場合、OracleではUPDATE文が1回のみ実行されます。変数が配列の場合、Oracleでは配列のコンポーネント・セットごとに1回ずつ文が実行されます。1回の実行で、0行、1行または複数行を更新できます。

配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleで文が実行される回数は、次の値のうち小さい方によって決まります。

更新された行の累積数は、SQLCAのSQLERRDコンポーネントの第3要素に設定されて戻されます。入力ホスト変数として配列を使用した場合、この数値はUPDATE文で処理された配列のすべてのコンポーネントにおよぶ更新数の合計を示します。条件を満たす行が存在しない場合、行は更新されず、OracleではSQLCAのSQLCODE要素にエラー・メッセージが設定されて戻されます。WHERE句を省略した場合は、すべての行が更新され、OracleではSQLCAのSQLWARN要素の第5コンポーネントに警告フラグが設定されます。

UPDATE文においてコメントを使用して、指示やヒントをオプティマイザに渡すことができます。オプティマイザはヒントを使用して文の実行計画を選択します。ヒントの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

この文の詳細は、第6章「埋込みSQL」および第3章「データベースの概要」を参照してください。

次の例では、埋込みSQL UPDATE文の使用方法を示します。

EXEC SQL UPDATE emp 
    SET sal = :sal, comm = :comm INDICATOR :comm_ind 
    WHERE ename = :ename; 
 
EXEC SQL UPDATE emp 
    SET (sal, comm) = 
        (SELECT AVG(sal)*1.1, AVG(comm)*1.1 
         FROM emp) 
    WHERE ename = 'JONES'; 

関連項目

「DECLARE DATABASE(Oracle埋込みSQLディレクティブ)」

VAR(Oracle埋込みSQLディレクティブ)

用途

ホスト変数の同値化を行うか、特定の外部データ型を個々のホスト変数に割り当て、デフォルトのデータ型割当てを上書きします。また、オプションのCONVBUFSZ句を使用して、キャラクタ・セットを変換するためのバッファ・サイズを指定します。

前提条件

ホスト変数がPro*C/C++プログラムで宣言済である必要があります。

構文

VAR
図var.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
host_variable 前に宣言された入力または出力ホスト変数(あるいはホスト表)。

VARCHARおよびVARRAW外部データ型が2バイト長のフィールドで、nバイトのデータ・フィールドが続く場合、nの値の範囲は1〜65533になります。そのため、type_nameがVARCHARまたはVARRAWの場合、host_variableには少なくとも3バイトの長さが必要です。

LONG VARCHARおよびLONG VARRAW外部データ型が4バイト長のフィールドで、nバイトのデータ・フィールドが続く場合、nの値の範囲は1〜2147483643になります。そのため、type_nameがLONG VARCHARまたはLONG VARRAWの場合、host_variableには少なくとも5バイトの長さが必要です。

dtyp Pro*C/C++によって認識される内部データ型ではない外部データ型。データ型には、長さ、精度または位取りを含めることができます。この外部データ型がhost_variableに割り当てられます。外部データ型のリストは、「外部データ型」を参照してください。
length データ型の長さ。有効な長さをバイト数で指定する定数式または整定数です。長さの値には、外部データ型を収容できるサイズを指定する必要があります。

type_nameがROWIDまたはDATEの場合、lengthは事前定義されているため指定できません。他の外部データ型では、lengthはオプションです。デフォルトはhost_variableの長さです。

lengthを指定するときに、type_nameがVARCHAR、VARRAW、LONG VARCHARまたはLONG VARRAWの場合は、データ・フィールドの最大長を指定してください。この長さフィールドは、pro*C/C++が指定します。type_nameがLONG VARCHARまたはLONG VARRAWで、データ・フィールドが65534バイト以上の場合は、lengthフィールドに「-1」を入れてください。

precisionおよびscale それぞれ有効桁数と四捨五入が実行される点を表す定数式または定数。たとえば位取りが2のときは、1/100の倍数の近似値に値が四捨五入される(3.456は3.46になる)ことを意味します。また位取りが-3のときは、1000の倍数の近似値に値が四捨五入される(3456が3000になる)ことを意味します。

precisionには1〜99の値、scaleには-84〜99の値を指定できます。ただし、最大精度は38、データベース列の位取りは127になります。したがって、presisionが39以上の場合、host_variableの値はデータベース列に挿入できません。一方、列値の位取りが100以上の場合、host_variableに入れる値の選択もフェッチもできません。

size 指定したhost_variableから他のキャラクタ・セットへの変換に使用されるバッファのバイト単位のサイズ。定数または定数式です。

ランタイム・ライブラリ内のバッファのバイト単位のサイズ。これを使用して、host_variableのキャラクタ・セットを変換します。


使用上の注意

lengthprecisionscaleおよびsizeは定数式になる場合があります。

ホスト変数の同値化は、データ型の同値化の1つです。次の目的には、データ型の同値化が有効です。

sizelengthprecisionscaleには、プリコンパイラの実行時に値が認識される複雑なC言語の定数式を任意に使用できることに注意してください。

次に例を示します。

#define LENGTH 10
...
char character set is nchar_cs ename[LENGTH+1];
exec sql var ename is string(LENGTH+1) convbufsz is (LENGTH*2);

また、この文ではマクロも使用できるため注意してください。

CONVBUFSZ句を指定しなければ、Oracleランタイム・ライブラリが、ホスト変数のキャラクタ・サイズ(NLS_LANGで判別)とデータベース・キャラクタ・セットのキャラクタ・サイズとの割合に基づいてバッファ・サイズを自動的に決定します。これによって、LONGサイズのバッファが生成される場合があります。データベース表では、LONG列は1列しか格納できません。複数のLONG値が指定されると、エラーとなります。

このようなエラーを避けるには、LONGサイズよりも短い長さを使用してください。キャラクタ・セットの変換によって値がCONVBUFSZで指定した長さを超える場合は、実行時にエラーが戻されます。Pro*C/C++プリコンパイラは、ユーザー定義型の同値化に使用できるプリコンパイラのTYPEディレクティブもサポートしています。「ホスト変数の同値化」も参照してください。

この例では、ホスト変数DEPT_NAMEがデータ型STRINGに同値化され、ホスト変数BUFFERがデータ型RAW(200)に同値化されます。

EXEC SQL BEGIN DECLARE SECTION; 
    ... 
    char dept_name[15];               -- default datatype is CHAR 
    EXEC SQL VAR dept_name IS STRING; -- reset to STRING 
    ... 
    char buffer[200];                 -- default datatype is CHAR 
    EXEC SQL VAR buffer IS RAW(200); -- refer to RAW 
    ...
EXEC SQL END DECLARE SECTION; 

関連項目

「TYPE(Oracle埋込みSQLディレクティブ)」

WHENEVER(埋込みSQLディレクティブ)

用途

埋込みSQLプログラムの実行時にエラーまたは警告が発生した場合の処置を指定します。

前提条件

なし。

構文

WHENEVER
図whenevrc.gifの説明

キーワードおよびパラメータ

キーワードおよびパラメータ 説明
NOT FOUND SQLCODEに+1403のエラー・コード(またはMODE=ANSIの場合は+100コード)を戻す例外条件をすべて識別します。
SQLERROR 負のリターン・コードに終わる条件を識別します。
SQLWARNING 致命的ではない警告条件を識別します。
CONTINUE プログラムに次の文に進むように指示します。
GOTO label プログラムに、ラベルによって名前が付けられている文に分岐するように指示します。
STOP プログラムの実行を停止します。
DO routine プログラムがroutineという名前のファンクションをコールすることを示します。
DO BREAK 条件が満たされると、ループからbreak文が実行されます。
DO CONTINUE 条件が満たされると、ループからcontinue文が実行されます。

使用上の注意

WHENEVERディレクティブにより、埋込みSQL文でエラーまたは警告が発生した場合に、プログラムの制御をエラー処理ルーチンに移すことができます。

WHENEVERディレクティブのスコープは論理的にではなく、位置的に適用されます。WHENEVER文は、プログラム論理の流れではなく、ソース・ファイル内で物理的に後続するすべての埋込みSQL文に適用されます。WHENEVERディレクティブは、同じ条件をチェックする別のWHENEVERディレクティブに置換されるまで有効です。

このディレクティブの詳細は、「WHENEVERディレクティブの使用」を参照してください。

埋込みSQLのWHENEVERディレクティブとSQL*PlusのWHENEVERコマンドを混同しないでください。

次の2つの例では、埋込みSQLプログラムにおけるWHENEVERディレクティブの使用方法を示しています。

例1:

EXEC SQL WHENEVER NOT FOUND CONTINUE;
... 
EXEC SQL WHENEVER SQLERROR GOTO sql_error; 
... 
sql_error: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK RELEASE;
... 

例2:

EXEC SQL WHENEVER SQLERROR GOTO connect_error; 
... 
connect_error: 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 
    EXEC SQL ROLLBACK RELEASE; 
    printf("\nInvalid username/password\n"); 
    exit(1); 

関連項目

なし