首页 > 解决方案 > 转换硬编码 - 使用动态 sql

问题描述

这是我的程序使用 11G 的批量加载能力的地方。如何将其转换为使用动态 SQL,这样我就不必对源表和目标表进行硬编码。

CREATE OR REPLACE PROCEDURE Ld_Partition_Tbl 
(p_array_size IN PLS_INTEGER DEFAULT 10000) IS

TYPE ARRAY IS TABLE OF *SourceTableName*%ROWTYPE;
l_data ARRAY;

CURSOR c IS SELECT * FROM *SourceTableName*;

BEGIN

  OPEN c;
    LOOP
      FETCH c BULK COLLECT INTO l_data LIMIT p_array_size;

      FORALL i IN 1..l_data.COUNT
      INSERT INTO *TargetTableName* VALUES l_data(i);

      EXIT WHEN c%NOTFOUND;
    END LOOP;
  CLOSE c;

END Ld_Partition_Tbl;

我需要将 SourceTableName 和 TargetTableName 替换为参数,但需要使用动态 SQL。

标签: oracledynamicplsql

解决方案


根据您提供的内容,您可以简单地运行它。您不需要将数据存储在中间变量l_data中。

EXECUTE IMMEDIATE 'INSERT INTO ' ||*TargetTableName*||' SELECT * FROM ' ||*SourceTableName*;

推荐阅读