zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

第九十章 SQL命令 WHERE CURRENT OF

SQL命令 of where Current
2023-09-11 14:15:37 时间

文章目录

第九十章 SQL命令 WHERE CURRENT OF

使用游标指定当前行的UPDATE/DELETE子句。

大纲

WHERE CURRENT OF cursor

参数

  • cursor - 指定在光标的当前位置执行操作,光标是指向表的光标。

描述

WHERE CURRENT OF子句可用于基于游标的嵌入式SQL UPDATEDELETE语句,以指定位于要更新或删除记录上的游标。
例如:

   &sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)

删除最后一个FETCH命令从“EmployeeCursor”游标获得的行。

嵌入式SQL UPDATEDELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。
如果指定的UPDATEDELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。

更新的限制

当使用WHERE CURRENT OF子句时,不能使用当前字段值更新字段以生成更新的值。
例如,SET Salary=Salary+100SET Name=UPPER(Name)
尝试这样做会导致SQLCODE -69错误:SET <field> = <value expression> not allowed with WHERE CURRENT OF <cursor>

示例

下面的嵌入式SQL示例显示了使用WHERE CURRENT OFUPDATE操作:

ClassMethod WhereCurrentOf()
{
	n %ROWCOUNT,%ROWID
	&sql(
		DECLARE WPCursor CURSOR FOR 
			SELECT Lang FROM SQLUser.WordPairs
			WHERE Lang='Sp'
	)
	&sql(OPEN WPCursor)
	q:(SQLCODE '= 0)
	for { 
		&sql(FETCH WPCursor)
		q:SQLCODE 
		&sql(
			UPDATE SQLUser.WordPairs SET Lang='Es'
			WHERE CURRENT OF WPCursor
		)
		if SQLCODE = 0 {
			w !,"Update succeeded"
			w !,"Row count=",%ROWCOUNT," RowID=",%ROWID 
		} else {
			w !,"Update failed, SQLCODE=",SQLCODE 
		}
	}
	&sql(CLOSE WPCursor)
}

下面的嵌入式SQL示例显示了使用WHERE CURRENT OFDELETE操作:

ClassMethod WhereCurrentOf1()
{
	n %ROWCOUNT,%ROWID
	&sql(
		DECLARE WPCursor CURSOR FOR 
		SELECT Lang FROM SQLUser.WordPairs
		WHERE Lang='En'
	)
	&sql(OPEN WPCursor)
	q:(SQLCODE'=0)
	for { 
		&sql(FETCH WPCursor)
		q:SQLCODE 
		&sql(
			DELETE FROM SQLUser.WordPairs
			WHERE CURRENT OF WPCursor
		)
		if SQLCODE=0 {
			w !,"Delete succeeded"
			w !,"Row count=",%ROWCOUNT," RowID=",%ROWID 
		} else {
			w !,"Delete failed, SQLCODE=",SQLCODE 
		}
	}
	&sql(CLOSE WPCursor)
}