使用 'where current of' 的动态 SQL

Posted

技术标签:

【中文标题】使用 \'where current of\' 的动态 SQL【英文标题】:Dynamic SQL using 'where current of'使用 'where current of' 的动态 SQL 【发布时间】:2017-05-02 20:06:07 【问题描述】:

我有一个非常通用/动态的过程,我将表名作为参数传递并使用 EXECUTE IMMEDIATE 动态执行查询。我需要遍历游标并更新每条记录。有没有办法不必对我的表名进行硬编码??

我试过了,但它不起作用:

    open cur for v_sql;
    loop
        fetch cur into v_recid;
        EXIT WHEN cur%NOTFOUND;
        EXECUTE IMMEDIATE 'update '||p_table||q'[ set status = 'I' where current of cur]'; 
    end loop;
    close cur;

【问题讨论】:

您是否考虑过使用ROWID 作为更新密钥? 您遇到的错误是什么?如果您使用“current of”,则与游标关联的查询需要具有“for update”子句。 【参考方案1】:

SQL 是一种面向集合的语言。您的解决方案是一次排或“一次慢”。我建议您花时间想办法不要循环并在单个语句中进行更新。

【讨论】:

谢谢。这是我在发布问题后不久意识到的,并决定采用这种方法。但还是很好奇能不能做到。我没有意识到“电流在哪里”这么慢。

以上是关于使用 'where current of' 的动态 SQL的主要内容,如果未能解决你的问题,请参考以下文章

postgresql/lightdb中WHERE CURRENT OF的使用

WHERE CURRENT OF 引发和无效的 rowid 错误

Oracle/PLSQL WHERE CURRENT OF Statement

(gdb) n Cannot find bounds of current function

(gdb) n Cannot find bounds of current function

(gdb) n Cannot find bounds of current function