スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
UAP中でのSQLの基本構成を次の図に示します。なお,ここではUAPをCOBOL言語で記述する場合について説明します。
図3-1 UAP中でのSQLの基本構成
SQLで検索したデータをUAP側で受け取ったり,逆にUAP側のデータをSQLで表に挿入したりするには,両方の言語間の橋渡しをする変数が必要になります。このために,埋込み変数を使用します。また,ナル値を含むデータを受け渡す必要のあるときには,埋込み変数と併せて標識変数を使用します。
埋込み変数及び標識変数の宣言例を次に示します。
なお,SQL中での埋込み変数及び標識変数の指定方法については,「(5) 検索,更新のSQL(実行文)」を参照してください。
EXEC SQL BEGIN DECLARE SECTION ..........1 END-EXEC. 77 XUSERID PIC X(7). ...........2 77 XPSWD PIC X(7). ...........2 77 XSCODE PIC X(4). ...........2 77 XSNAME PIC N(8). ...........2 77 XGRYO PIC S9(9) COMP. .....2 77 IGRYO PIC S9(4) COMP. .....3 EXEC SQL END DECLARE SECTION ............4 END-EXEC.
ナル値の既定値設定機能を使用している場合,検索結果がナル値のときはナル値の代わりに既定値(数データの場合は0,文字データの場合は空白)を埋込み変数で受け取ることができます。この場合,既定値とナル値とを区別しなくていいときは,標識変数を使用する必要がなくなります。ナル値の既定値設定機能については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
HiRDBにユーザの認可識別子及びパスワードを通知して,UAPがHiRDBを使用できる状態にします。これをHiRDBとの接続といいます。HiRDBとの接続方法を次に示します。
EXEC SQL CONNECT :XUSERID IDENTIFIED BY :XPSWD END-EXEC.
UAPで複数行の検索結果を1行ずつ取り出すために,DECLARE CURSORでカーソルを宣言します。宣言したカーソルを使用して,データの検索,更新,及び削除をします。また,カーソルをオープンする場合はOPEN文,検索結果を取り出しカーソルを次の行へ進める場合はFETCH文,カーソルをクローズする場合はCLOSE文を使用します。
カーソル宣言中には,探索条件中の条件値として,埋込み変数及び標識変数を指定できます。これらを指定した場合,そのカーソルに対するOPEN文の実行時に,それらの変数中の値がHiRDBに渡されます。
カーソルの詳細については,「3.5 カーソルの効果」を参照してください。
カーソルの宣言方法を次に示します。
EXEC SQL DECLARE CR1 CURSOR FOR SELECT SCODE,SNAME,GRYO FROM ZAIKO END-EXEC.
SQL文の前にWHENEVER文を指定しておくと,エラーが発生したかどうかを自動的に判定できます。WHENEVER文の指定方法を次に示します。
EXEC SQL WHENEVER SQLERROR GO TO エラー処理 END-EXEC.
EXEC SQL WHENEVER NOT FOUND GO TO 検索終了処理 END-EXEC.
WHENEVER文は次に同じ種類のWHENEVER文が現れるまで,その間にあるすべてのSQLに対して有効となります。WHENEVER文の有効範囲については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
データを検索,更新,挿入,又は削除するためのSQL文を記述します。各SQL文の記述方法については,「2.データベースの操作」を参照してください。
ここでは,埋込み変数及び標識変数の使用方法について説明します。
1行SELECT文又はFETCH文のINTO句に,埋込み変数及び標識変数を指定します。このとき,各変数の先頭にはコロンを付けます。標識変数は対応する埋込み変数に続けて指定します。例を次に示します。
INTO句に指定した埋込み変数は,SELECT文の列の並びに指定した列名の順に対応しており,この順序に従って埋込み変数に検索結果が格納されます。
検索結果にナル値を含む場合は標識変数に負の値が格納されるので,この値を参照してナル値かどうかを判断します。このとき,埋込み変数の値は不定となります。また,標識変数の値が0のときは,ナル値以外の値を受け取ったことを示し,値が正のときは,ナル値以外の文字列データを受け取ったが,埋込み変数の領域長が不足していたため,右端が切り捨てられたことを示します。
また,探索条件の値に埋込み変数を指定しておけば,SQLの実行時に探索条件の値を与えることができます。
UPDATE文のSET句及びINSERT文のVALUES句に埋込み変数及び標識変数を指定します。このとき,各変数の先頭にはコロンを付けます。標識変数は対応する埋込み変数に続けて指定します。例を次に示します。
EXEC SQL UPDATE ZAIKO SET GRYO=:XGRYO:IGRYO WHERE SCODE=:XSCODE END-EXEC.
EXEC SQL INSERT INTO ZAIKO VALUES(:XSCODE,:XSNAME,:XCOL,:XTANKA ,:XGRYO:IGRYO,:XMAXRYO,:XSAFRYO) END-EXEC.
UPDATE文又はINSERT文によって表にナル値を設定する場合は,そのSQLを実行する前にあらかじめ標識変数に負の値を設定しておきます。このとき,埋込み変数には何も設定しなくてよいです。また,ナル値以外の値を渡す場合は,標識変数の値を0又は正にしておきます。
SQLの実行中にエラーが発生した場合,SQLCODE,SQLSTATEを参照すると,HiRDBから返されるリターンコードが分かります。そのリターンコードを利用して,その後の処理をどうするか指示します。ただし,「(4) エラー時の処置の指定」で,既に同じ内容のエラー処理を指定している場合は,ここで指示する必要はありません。
DECLARE CURSORのような宣言文の直後に,エラーの判定はしないでください。エラーの判定をすると,不正なSQLCODEを参照して,HiRDBが誤動作してしまいます。
エラーの判定については,「3.6.1 エラーの判定」を参照してください。
トランザクション内で更新処理をした場合,更新したデータベースの内容を有効にし,トランザクションを正常終了させます。
トランザクションを有効にするSQL文を次に示します。
EXEC SQL COMMIT END-EXEC.
トランザクション内で更新したデータベースの内容を無効にし,トランザクションを終了させます。トランザクション内での更新処理が不正だった場合など,データベースの更新を取り消したいときに指定します。
トランザクションを無効にするSQL文を次に示します。
EXEC SQL ROLLBACK END-EXEC.
トランザクションを正常終了させて,UAPをHiRDBから切り離します。DISCONNECT文は,RELEASE指定のCOMMIT文を実行したときと同じになります。
トランザクションを正常終了させて,UAPをHiRDBから切り離すSQL文を次に示します。
EXEC SQL DISCONNECT END-EXEC.
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.