埋め込み SQL の例
次のコードは、C で記述された単純な埋め込み SQL プログラムです。このプログラムは、埋め込み SQL 手法の多くを示しますが、すべてではありません。 このプログラムでは、ユーザーに注文番号の入力を求め、顧客番号、営業担当者、および注文の状態を取得し、取得した情報を画面に表示します。
int main() {
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
int OrderID; /* Employee ID (from user) */
int CustID; /* Retrieved customer ID */
char SalesPerson[10] /* Retrieved salesperson name */
char Status[6] /* Retrieved order status */
EXEC SQL END DECLARE SECTION;
/* Set up error processing */
EXEC SQL WHENEVER SQLERROR GOTO query_error;
EXEC SQL WHENEVER NOT FOUND GOTO bad_number;
/* Prompt the user for order number */
printf ("Enter order number: ");
scanf_s("%d", &OrderID);
/* Execute the SQL query */
EXEC SQL SELECT CustID, SalesPerson, Status
FROM Orders
WHERE OrderID = :OrderID
INTO :CustID, :SalesPerson, :Status;
/* Display the results */
printf ("Customer number: %d\n", CustID);
printf ("Salesperson: %s\n", SalesPerson);
printf ("Status: %s\n", Status);
exit();
query_error:
printf ("SQL error: %ld\n", sqlca->sqlcode);
exit();
bad_number:
printf ("Invalid order number.\n");
exit();
}
このプログラムについて、以下の点に注意してください:
ホスト変数 ホスト変数は、BEGIN DECLARE SECTION キーワードと END DECLARE SECTION キーワードで囲まれたセクションで宣言されます。 各ホスト変数名は、埋め込みSQL ステートメントの中に現れると、コロン(:)が先頭に付きます。 コロンを使用すると、プリコンパイラーはホスト変数と、同じ名前を持つテーブルや列などのデータベース オブジェクトを区別できます。
データ型 DBMS とホスト言語でサポートされるデータ型は、まったく異なる場合があります。 これは、ホスト変数がデュアル ロールを果たすので影響します。 一方、ホスト変数はプログラム変数であり、ホスト言語ステートメントによって宣言され、操作されます。 一方、データベース データを取得するために、埋め込み SQL ステートメントで使用されます。 DBMS データ型に対応するホスト言語の種類がない場合、DBMS は自動的にデータを変換します。 ただし、各 DBMS には変換プロセスに関連する独自の規則と特異性があるため、ホスト変数の型は慎重に選択する必要があります。
エラー処理 DBMS は、SQL 通信領域または SQLCA を介してアプリケーション プログラムにランタイム エラーを報告します。 前のコード例では、最初の埋め込み SQL ステートメントは INCLUDE SQLCA です。 これにより、プリコンパイラーは、SQLCA 構造体をプログラムに組み込むように指示します。 これは、プログラムが DBMS によって返されたエラーを処理するたびに必要です。 The WHENEVER...GOTO ステートメントは、エラーが発生したときに特定のラベルに分岐するエラー処理コードを生成するようにプリコンパイラーに指示します。
Singleton SELECT データを返すために使用されるステートメントは、シングルトン SELECT ステートメントです。つまり、1 行のデータのみが返されます。 そのため、コード例ではカーソルを宣言したり使用したりしません。