Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

WHERE CURRENT OF

カーソルを使用して現在の行を指定する UPDATE/DELETE 節です。

Synopsis

WHERE CURRENT OF cursor

引数

cursor 処理が現在の cursor の場所で実行されることを指定します。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 を指定した場合に、WHEREWHERE CURRENT OF のいずれも指定しないときは、テーブル内のすべてのレコードが更新または削除されます。

UPDATE の制限事項

WHERE CURRENT OF 節を使用する場合は、現在のフィールド値を使用して新しい値を生成してフィールドを更新することはできません。例としては、SET Salary=Salary+100SET Name=UPPER(Name) が挙げられます。これを実行しようとすると、SQLCODE -69 エラーが返されます。SET <field> = <value expression> を WHERE CURRENT OF <cursor> で使用できません。

以下の埋め込み SQL の例は、WHERE CURRENT OF を使用した UPDATE 処理を示しています。

  NEW SQLCODE,%ROWCOUNT,%ROWID
  &sql(DECLARE WPCursor CURSOR FOR 
        SELECT Lang FROM SQLUser.WordPairs
        WHERE Lang='Sp')
   &sql(OPEN WPCursor)
   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 SQLCODE,%ROWCOUNT,%ROWID
  &sql(DECLARE WPCursor CURSOR FOR 
        SELECT Lang FROM SQLUser.WordPairs
        WHERE Lang='En')
   &sql(OPEN WPCursor)
   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)

関連項目

FeedbackOpens in a new tab