【问题标题】: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”子句。

标签: oracle plsql oracle11g


【解决方案1】:

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

【讨论】:

  • 谢谢。这是我在发布问题后不久意识到的,并决定采用这种方法。但还是很好奇能不能做到。我没有意识到“电流在哪里”这么慢。
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多