【问题标题】:can we use cursor for a UPDATE query?我们可以使用游标进行 UPDATE 查询吗?
【发布时间】:2013-04-17 09:48:25
【问题描述】:

我们是否也可以为 UPDATE 查询声明和打开一个游标,还是只为 SELECT 查询?

   EXEC SQL PREPARE S FROM :query;
   EXEC SQL DECLARE C CURSOR FOR S;
   DbUtilT::set_bind_variables(bind_dp,&paramList);
   EXEC SQL OPEN C USING DESCRIPTOR bind_dp;
   EXEC SQL WHENEVER NOT FOUND GOTO end_update_loop;
   EXEC SQL FETCH C USING DESCRIPTOR bind_dp;
   EXEC SQL COMMIT WORK;

这样好吗?或者我们应该只对 SELECT 语句使用游标,那么我们如何执行 UPDATE 查询?

【问题讨论】:

  • @Alex - 是的,这是在 Pro*C 中

标签: sql oracle dynamic-sql bind-variables


【解决方案1】:

如果query 类似于:

SELECT id FROM mytable WHERE ... FOR UPDATE OF id

那么你可以这样做:

...
EXEC SQL FETCH C USING DESCRIPTOR bind_dp;
EXEC SQL UPDATE mytable SET id = <something> WHERE CURRENT OF C;

不过我不太确定你的意思;您不必使用游标进行更新,您可以这样做:

EXEC SQL UPDATE mytable SET id = <something> WHERE ...;

... 或等效的预处理语句。

我完全误解了这个问题吗?

【讨论】:

  • 是的,当我们在查询中没有绑定变量时。如果我在查询中使用绑定变量.. 更新 set =:BIND_VAR1 where =:BINDVAR2 and =:BINDVAR3 如何通过?
猜你喜欢
  • 2015-07-31
  • 2016-11-02
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多