このセクションでは、C 言語 Empress SQLプリコンパイラのコマンドステートメントの 構文をアルファベット順に示します。 各SQLコマンド行は、キーワードEXEC SQLで開始し、 セミコロン (;)で終了しなければなりません。 また、SQL ステートメントは複数行に渡って指定することができます。
宣言セクションの始まりを指示します。 この宣言セクションにプログラムのSQL コマンドで使用する変数を宣言します。
構文 |
EXEC SQL BEGIN DECLARE SECTION; |
SQLCODE |
意味はありません。 |
注意 |
|
例 |
EXEC SQL BEGIN DECLARE SECTION; int i; short j; float f; char str [10]; EXEC SQL END DECLARE SECTION; |
C プロシージャの呼び出し、または式の評価を行います。
構文 |
EXEC SQL :var = [CALL] expr; | ||||
SQLCODE |
| ||||
注意 |
各種集計関数とオペレーターはこのステートメント使って呼び出すことはできません。 |
現在、実行されているトランザクションを取り消します。
Syntax |
EXEC SQL CANCEL TRANSACTION; |
SQLCODE |
意味はありません。 |
注意 |
|
CLOSE CURSOR句は、行操作のためにオープンした カーソルをクローズします。
構文 |
EXEC SQL CLOSE cursor_name; where:
| ||||
SQLCODE |
| ||||
注意 | カーソルはクローズしなければ、再オープンすることはできません。 |
指定したテーブルをクローズします。
構文 |
EXEC SQL CLOSE_TABLE [table {, table}]; |
SQLCODE |
意味はありません。 |
注意 |
CLOSE_TABLEコマンドにテーブル名を指定しないと、 すべてのテーブルがクローズされます。 |
例 1 |
次のコマンドは、すべてのオープンされたテーブルのクローズします。 EXEC SQL CLOSE_TABLE; |
例 2 |
次のコマンドは、指定したloans およびpersonnelテーブルの クローズします。 EXEC SQL CLOSE_TABLE loans, personnel; |
COMMIT TRANSACTIONは、現在のトランザクション中に データベースに対して行った変更をデータベースに反映します。
構文 |
EXEC SQL COMMIT TRANSACTION; |
SQLCODE |
意味はありません。 |
Note | COMMIT TRANSACTIONはすべてのデータベースにわたる トランザクション全体をコミットします。 |
カレントのデータベースを変更します。
構文 |
EXEC SQL DATABASE IS database; |
SQLCODE |
意味はありません。 |
注意 |
|
次のコマンドは、repairsディレクトリに位置する repairsデータベースをデフォルトデータベースに設定します。
EXEC SQL DATABASE IS "repairs";
次のコマンドは、プログラム変数 ":base" に格納された名前のデータベースをデフォルトデータベースに設定します。
EXEC SQL DATABASE IS :base;
オープンするカーソルを宣言します。 この処理ではカーソル名を定義し、 WHERE句によるコンテキストと名前を関連付けます。
構文 |
EXEC SQL DECLARE cursor_name CURSOR | ||||||||
FOR SELECT [ |DISTINCT |] [attr {, attr}] |UNIQUE | | |||||||||
FROM table {, table} | |||||||||
[where_clause] | |||||||||
[sort_clause] | |||||||||
| |||||||||
| |||||||||
SQLCODE |
意味はありません。 | ||||||||
Notes |
| ||||||||
例 |
EXEC SQL DECLARE c1 CURSOR FOR SELECT FROM personnel, loans WHERE personnel.name='Jones' AND personnel.name = loans.name; 上記のコマンドはc1というカーソルを宣言します。 このカーソルは、テーブルpersonnel と loans から検索した行に対して処理を行います。 レコード検索の条件は、WHERE句に定義します。 このコンテキストは、personnelテーブルの nameアトリビュートがJonesと等しく、 かつ、personnelテーブルのnameアトリビュート とloansテーブルnameアトリビュートが等しい レコードになります。 |
テーブルまたはビューから1行以上削除します。
構文 |
| ||||||||||
SQLCODE |
| ||||||||||
注意 |
| ||||||||||
例 1 |
次のコマンドはアトリビュートamountの値が 50 未満であるすべての レコードをloansテーブルから削除します。 EXEC SQL DELETE FROM loans WHERE amount < 50;
| ||||||||||
例 2 |
次のコマンドは'c'という名前のカーソルと関連付けたコンテキストから カレントレコードを削除します。 カレントレコードがない場合、何も削除しません。 EXEC SQL DELETE FROM loans WHERE CURRENT OF c; |
プログラム中の SQL コマンドで使用する変数のための宣言セクションの終了を指示します。
構文 |
EXEC SQL END DECLARE SECTION; |
SQLCODE |
意味はありません。 |
注意 |
各BEGIN DECLARE SECTIONには、対応するEND DECLARE SECTIONがなければ なりません。 |
クリーンアップ処理を実行します。ただし、プログラムは終了しません。
構文 |
EXEC SQL EXIT; |
SQLCODE |
意味はありません。 |
注意 |
|
複数行の操作において、FETCHは定義したコンテキストの次の有効な行に カーソルを位置付けます。 この行をカレントにして、 指定されたアトリビュートの値を検索し、指示された変数にこの値を格納します。
構文 |
EXEC SQL FETCH [|NEXT |[AGAIN][FROM]] cursor_name |PRIOR| attr {, attr} INTO variable {, variable}; | ||||||||
SQLCODE |
| ||||||||
SQLWARN1 |
| ||||||||
注意 |
コンテキストの次の行がアクセスできない場合(ロックされている場合)、 その行はカレント行とされますが、そのアトリビュート値はプログラム変数に 読み込まれません。FETCH_AGAINコマンドを使用することで、 これらのアトリビュートの再読み込みを試みることができます | ||||||||
例 |
次のコマンドは、c1という名前のカーソルに関連付けられたコンテキストで 次に処理可能なレコードをカレントレコードとします。 アトリビュートname と credit_limitの値を取得し、 プログラム変数:name と:crelimにそれぞれの値を 格納します。 EXEC SQL FETCH c1 name, credit_limit INTO :name, :crelim; |
FETCHが成功しなかった場合、 FETCH_AGAINは、次の有効なレコードではなく カーソルが指示するカレントのレコードの再読み込みを試みます。
構文 |
EXEC SQL FETCH_AGAIN cursor_name attr {, attr} INTO variable {, variable}; | ||||||||
SQLCODE |
| ||||||||
SQLWARN1 |
| ||||||||
注意 |
FETCH_AGAINは、カレントレコードのステータスに影響しません。 FETCH_AGAINの実行をしても、カーソルの移動はせず、 カレントレコードのままです。 | ||||||||
例 |
次のコマンドは、 c1という名前のカーソルに関連付けられたコンテキストで カレントレコードからアトリビュートname と credit_limitの値を取得し、プログラム変数:name と:crelimにそれぞれの値を格納することを試みます。 EXEC SQL FETCH_AGAIN c1 name, credit_limit INTO :name, :crelim; |
SQLCA は、SQL コミュニケーションエリアで、 コンパイラとユーザーの共通のエリアとして使用されます。 INCLUDE SQLCAコマンドは、プログラム中の最初の プリコンパイラステートメントとして記述しなければなりません。
構文 |
EXEC SQL INCLUDE SQLCA |
SQLCODE |
意味はありません。 |
注意 |
INCLUDE SQLCAステートメントは、プログラムの最初の プリコンパイラステートメントとして記述しなければなりません。 |
Empressの初期化処理を実行します。
構文 |
EXEC SQL INIT; | ||
SQLCODE |
| ||
注意 |
|
テーブルに新しい行のアトリビュートの値を挿入にします。
構文 |
EXEC SQL INSERT INTO table (attr {, attr}) VALUES (value {, value});
| ||||||
SQLCODE |
| ||||||
注意 |
| ||||||
例 |
次のコマンドは、アトリビュートnameにMosca、 numberに10、 credit_limitに1500の値を設定し、 personnelテーブルに新しい行を挿入します。 EXEC SQL INSERT INTO personnel (name, number, credit_limit) VALUES ("Mosca", 10, 1500); |
複数行の操作を実行するために指定したカーソルをオープンします。
構文 |
EXEC SQL OPEN cursor_name; | ||||
注意 |
| ||||
SQLCODE |
|
操作のために明示的にオープンします。
構文 |
| |||||
SQLCODE |
| |||||
注意 |
実行する各コマンドについて、プリコンパイラは必要なテーブルがすべてオープン されているかどうかをチェックします。 オープンされている場合は、正しいモード(read, update または dirty read) でオープンされています。テーブルがオープンされない場合は、 SQLコマンドに対応したモードでオープンされます。 | |||||
例 |
次のコマンドは、読み込み処理のためにテーブルloansをオープンし、 更新処理のためにpersonnelテーブルをオープンします。 EXEC SQL OPEN_TABLE loans FOR READ, personnel FOR UPDATE; |
テーブルまたはビューから1行のデータを検索して、 指定したプログラム変数に取得した値を格納します。
構文 |
EXEC SQL SELECT attr {, attr} FROM table {, table} INTO variable {, variable} [where_clause]; | ||||||||
SQLCODE |
| ||||||||
SQLWARN1 |
| ||||||||
注意 |
| ||||||||
例 |
次のコマンドは、personnelテーブルからアトリビュート name と dateの値を検索します。 WHERE句の条件に一致する最初のレコードから値が取得され、 こららの値はプログラム変数の:var1 と :var2 に格納されます。 EXEC SQL SELECT name, date FROM personnel INTO :var1, :var2 WHERE name='Jones'; |
これに続くコマンドに対して、トランザクションを開始します。
構文 |
| ||||
SQLCODE |
| ||||
注意 |
トランザクションは、検索ループ中から開始することが可能です。 |
指定されたテーブルの1つ以上のレコードを指定された値で更新します。
構文 | EXEC SQL UPDATE table SET attr = value {, attr = value} |where_clause |; |WHERE CURRENT OF cursor_name| | ||||||||||||
SQLCODE |
| ||||||||||||
注意 |
| ||||||||||||
例 1 |
次のコマンドは、アトリビュートcredit_limit and dateを 指定した値で更新します。 この処理では、personnelテーブルのnameの値が Jonesであるすべてのレコードを更新します。 EXEC SQL UPDATE personnel SET credit_limit=100, date='19851119' WHERE name='Jones'; | ||||||||||||
例 2 |
次のコマンドは、カーソルcに関連付けられたコンテキストの カレントレコードのみを更新します。 EXEC SQL UPDATE personnel SET credit_limit=100, date='19851119' WHERE CURRENT OF c; |
WHERE句は、その条件を満たすレコードのセットを決定します。 WHERE句は常に他のSQLコマンドのオプションとして使用されます。
WHERE句は、真 または 偽で評価するブール式を構成し、 AND または ORによってブール演算子を結合することにより 複合したWHERE句を作成することができます。 複合WHEREの各部の演算の順序は括弧を使用して制御することができます。
構文 |
| |||||||||||||
boolean_exprは以下のいずれかです。
operandは以下のとおりです。
| ||||||||||||||
SQLCODE |
意味はありません。 | |||||||||||||
注意 |
|
WHENEVERは、プログラムの実行中にエラーが発生した場合に 行うべき処置を定義することができます。
構文 |
| |||||
SQLCODE |
意味はありません。 | |||||
注意 |
|