第九十章 SQL命令 WHERE CURRENT OF
2023-09-11 14:15:37 时间
第九十章 SQL命令 WHERE CURRENT OF
使用游标指定当前行的UPDATE/DELETE子句。
大纲
WHERE CURRENT OF 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
既不带WHERE
也不带WHERE CURRENT OF
,则会更新或删除表中的所有记录。
更新的限制
当使用WHERE CURRENT OF
子句时,不能使用当前字段值更新字段以生成更新的值。
例如,SET Salary=Salary+100
或SET Name=UPPER(Name)
。
尝试这样做会导致SQLCODE -69
错误:SET <field> = <value expression> not allowed with WHERE CURRENT OF <cursor>
。
示例
下面的嵌入式SQL示例显示了使用WHERE CURRENT OF
的UPDATE
操作:
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 OF
的DELETE
操作:
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)
}
相关文章
- Top 10 steps to optimize data access in SQL Server
- SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法
- 本人收藏的Sql server经典t-sql语句(备忘录,持续更新中)
- 一则> ORA-00936: missing expression 错误的排查处理 SQL中的中括号对应ORACLE中的双引号
- 第八十章 SQL命令 UNION
- 第七十七章 SQL命令 TRUNCATE TABLE
- 第四十九章 SQL命令 GROUP BY
- 第四十六章 SQL命令 FROM(二)
- 第十章 SQL命令 CREATE PROCEDURE(一)
- C#拼接SQL中in条件
- sql语句的优化分析
- flink table&sql canal使用案例
- sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符
- sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
- Sql Server之旅——第十一站 简单说说sqlserver的执行计划
- Sql Server 性能优化之包含列
- SQL基础:常见SQL命令使用
- Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101
- (4.52)解决sql server动态SQL中对表字段操作时需要频繁 ISNULL的问题
- 如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?xml执行计划转为图形计划
- (二)牛客网SQL
- SQL server USE GO语句学习总结
- sql-如何提高SQL查询的效率?
- SQL Server 文件和文件组