0

我们也可以为 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 查询?

4

1 回答 1

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 ...;

...或等效的准备好的语句。

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

于 2013-04-17T10:06:03.150 回答