oracle - 转换硬编码 - 使用动态 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。
解决方案
根据您提供的内容,您可以简单地运行它。您不需要将数据存储在中间变量l_data
中。
EXECUTE IMMEDIATE 'INSERT INTO ' ||*TargetTableName*||' SELECT * FROM ' ||*SourceTableName*;
推荐阅读
- ruby-on-rails - 如何覆盖 Rails 框架中的一种方法?
- r - 针织 pdf 中的图像被切断
- javascript - 为什么这个过渡淡出但不淡入?
- c - 即使按值传递,多维数组值也会被修改
- reactjs - 在生产环境中,如何在开发中使用 localhost 的假后端
- postgresql - PostgreSQL - 仅选择前一个条目满足条件的行
- java - 在 JavaFX 中二次调整网格窗格的大小
- eclipse - GDB 7.5 兼容的 eclipse CDT 版本是什么
- jasper-reports - 将外部参数传递给 XML 文件数据适配器时出现问题
- android - 当我尝试在 Android Studio 中使用 gradle 从私有 Nexus 存储库中获取 .jar 库文件时,为什么会出现错误“无法解决依赖关系”?