次の方法で共有


埋め込み 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 行のデータのみが返されます。 そのため、コード例ではカーソルを宣言したり使用したりしません。