後で実行する文を準備するか、カーソルを定義します。
PREPARE statement-name FROM statement [ FOR { UPDATE [ cursor-concurrency ] | READ ONLY } ] [ DESCRIBE describe-type INTO [ [ SQL ] DESCRIPTOR ] descriptor ] [ WITH EXECUTE ]
statement-name : identifier | hostvar
statement : string | hostvar
describe-type : [ ALL | BIND VARIABLES | INPUT | OUTPUT | SELECT LIST ] [ LONG NAMES [ [ [ OWNER. ]TABLE. ]COLUMN ] | WITH VARIABLE RESULT ]
cursor-concurrency : BY { VALUES | TIMESTAMP | LOCK }
statement-name 文の名前は、識別子またはホスト変数とすることができます。ただし、複数の SQLCA を使用する場合には識別子を使用しないでください。そのような場合に識別子を使用すると、2 つの準備文の文番号が同じになり、誤った文が実行されたり開かれたりすることがあります。また、マルチスレッドのアプリケーションの場合、文の名前に識別子を使用することはおすすめしません。文の名前は複数のスレッドから同時に参照される場合があるためです。
DESCRIBE 句 DESCRIBE INTO DESCRIPTOR を使用すると、準備文は指定した記述子に記述されます。記述タイプとして、DESCRIBE 文で許容されるいずれかのものを使用できます。
FOR UPDATE | FOR READ ONLY カーソルで文が使用される場合のカーソル更新可能性を定義します。FOR READ ONLY カーソルは UPDATE (位置付け) 操作や DELETE (位置付け) 操作には使用できません。FOR READ ONLY がデフォルトです。
FOR UPDATE を指定したカーソル要求への応答では、SQL Anywhere は value-sensitive カーソルまたは sensitive カーソルを提供します。insensitive カーソルと asensitive カーソルは更新できません。
BY VALUES | BY TIMESTAMP データベースサーバーは、キーセット駆動型カーソルを利用して、結果セットをスクロールするときにローが変更または削除された場合にアプリケーションへ通知できるようにします。
BY LOCK 句 データベースサーバーは、結果セットのフェッチされたローに対する意図的ローロックを取得します。このロックは長期間のロックであり、トランザクションがコミットまたはロールバックされるまで保持されます。
WITH EXECUTE 句 WITH EXECUTE 句を使用すると、CALL または SELECT 文ではなく、ホスト変数が含まれていない場合にのみ、文が実行されます。正常に実行された後、文はその場で削除されます。文の準備と記述が正常に終了し、文が実行できない場合、警告 SQLCODE 111、SQLSTATE 01W08 が設定され、文は削除されます。
DESCRIBE INTO DESCRIPTOR 句と WITH EXECUTE 句を使用すると、必要なクライアント/サーバー通信を最小限に抑えて、パフォーマンスを改善できる場合があります。
WITH VARIABLE RESULT 句 WITH VARIABLE RESULT 句は、複数の結果セットと異なる数または種類のカラムを持つプロシージャーの記述に使用します。
WITH VARIABLE RESULT を使用する場合、記述後にデータベースサーバーによって SQLCOUNT 値に次のいずれかの値が設定されます。
0 結果セットは変更される場合があります。各 OPEN 文の後でプロシージャー呼び出しを再度記述してください。
1 結果セットは固定です。再度記述する必要はありません。
互換性を保つために、COMMIT、PREPARE TO COMMIT、ROLLBACK 文の準備は引き続きサポートされています。ただし、静的 Embedded SQL を使って、すべてのトランザクション管理操作を行うことをおすすめします。特定のアプリケーション環境では、これが必要とされるからです。また、他の Embedded SQL システムは、動的トランザクション管理操作をサポートしません。
PREPARE 文は、statement から SQL 文を準備し、準備した文を statement-name と関連付けます。この文名を参照し、文を実行します。または、文が SELECT 文または CALL 文の場合、カーソルを開きます。statement-name は、sqlca.h ヘッダーファイルの中で定義される a_sql_statement_number 型のホスト変数であり、自動的に含まれます。識別子が statement-name に使用される場合、モジュールごとに 1 つの文だけが、statement-name と一緒に準備されます。
statement-name にホスト変数を使用する場合は、short int 型にします。sqlca.h 内には、この型の型定義 a_sql_statement_number があります。この型を SQL プリプロセッサーが認識し、DECLARE セクションの中で使用できます。ホスト変数は、PREPARE 文の実行中にデータベースによって定義されるため、初期化する必要はありません。
なし
以前に同じ名前で準備した文が失われます。
WITH EXECUTE を指定した文は、実行が成功した場合のみ削除されます。それ以外の場合は、DROP を使って文を使用後に削除してください。DROP しないと、文が使ったメモリを再使用できません。
SQL/2008 PREPARE は、オプションの SQL/2008 言語機能 B031、"Basic dynamic SQL" の一部です。オプションの FOR UPDATE、FOR READ ONLY、DESCRIBE、WITH EXECUTE 句はベンダー拡張です。
次の文は、単純なクエリを準備します。
EXEC SQL PREPARE employee_statement FROM 'SELECT Surname FROM Employees'; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |