WHERE CURRENT OF (SQL)
構文
WHERE CURRENT OF cursor
概要
WHERE CURRENT OF 節はカーソル・ベースの埋め込み SQL UPDATE または DELETE 文で使用して、カーソルが位置付けられたレコードを更新または削除することを指定できます。以下に例を示します。
&sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)
最後の FETCH コマンドによって "EmployeeCursor" カーソルから取得した行を削除します。
埋め込み SQL UPDATE または DELETE では、WHERE 節 (カーソルなし)、または宣言されたカーソルを持つ WHERE CURRENT OF で使用できます (両方は不可)。UPDATE または DELETE を指定した場合に、WHERE と WHERE CURRENT OF のいずれも指定しないときは、テーブル内のすべてのレコードが更新または削除されます。
UPDATE の制限事項
WHERE CURRENT OF 節を使用する場合は、現在のフィールド値を使用して新しい値を生成してフィールドを更新することはできません。例としては、SET Salary=Salary+100 や SET Name=UPPER(Name) が挙げられます。これを実行しようとすると、SQLCODE -69 エラーが返されます。SET <field> = <value expression> を WHERE CURRENT OF <cursor> で使用できません。
引数
cursor
処理が現在の cursor の場所で実行されることを指定します。cursor はテーブルを指すカーソルです。
例
以下の埋め込み SQL の例は、WHERE CURRENT OF を使用した UPDATE 処理を示しています。
NEW %ROWCOUNT,%ROWID
&sql(DECLARE WPCursor CURSOR FOR
SELECT Lang FROM SQLUser.WordPairs
WHERE Lang='Sp')
&sql(OPEN WPCursor)
QUIT:(SQLCODE'=0)
FOR { &sql(FETCH WPCursor)
QUIT:SQLCODE
&sql(UPDATE SQLUser.WordPairs SET Lang='Es'
WHERE CURRENT OF WPCursor)
IF SQLCODE=0 {
WRITE !,"Update succeeded"
WRITE !,"Row count=",%ROWCOUNT," RowID=",%ROWID }
ELSE {
WRITE !,"Update failed, SQLCODE=",SQLCODE }
}
&sql(CLOSE WPCursor)
以下の埋め込み SQL の例は、WHERE CURRENT OF を使用した DELETE 処理を示しています。
NEW %ROWCOUNT,%ROWID
&sql(DECLARE WPCursor CURSOR FOR
SELECT Lang FROM SQLUser.WordPairs
WHERE Lang='En')
&sql(OPEN WPCursor)
QUIT:(SQLCODE'=0)
FOR { &sql(FETCH WPCursor)
QUIT:SQLCODE
&sql(DELETE FROM SQLUser.WordPairs
WHERE CURRENT OF WPCursor)
IF SQLCODE=0 {
WRITE !,"Delete succeeded"
WRITE !,"Row count=",%ROWCOUNT," RowID=",%ROWID }
ELSE {
WRITE !,"Delete failed, SQLCODE=",SQLCODE }
}
&sql(CLOSE WPCursor)