plsql 查询所有表名前缀为FOUNDATION_LOG_的表名 放入结果集 对该结果集进行循环 将所有的表数据拼接到一张表中
时间: 2024-03-11 20:47:14 浏览: 68
可以使用以下PL/SQL代码来实现:
```
DECLARE
v_sql VARCHAR2(2000);
v_table_name VARCHAR2(100);
v_concat_sql VARCHAR2(2000) := '';
BEGIN
-- 创建一个临时表,用于存储拼接后的数据
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE temp_table (data VARCHAR2(4000)) ON COMMIT PRESERVE ROWS';
-- 查询所有表名前缀为FOUNDATION_LOG_的表名
FOR c IN (SELECT table_name FROM user_tables WHERE table_name LIKE 'FOUNDATION_LOG_%') LOOP
v_table_name := c.table_name;
-- 拼接查询每个表的SQL语句
v_sql := 'SELECT to_clob(*) FROM ' || v_table_name;
-- 执行查询并将结果插入临时表
EXECUTE IMMEDIATE 'INSERT INTO temp_table SELECT ' || v_sql;
END LOOP;
-- 将拼接后的数据存储到一张表中
FOR c IN (SELECT data FROM temp_table) LOOP
v_concat_sql := v_concat_sql || c.data;
END LOOP;
-- 创建目标表并插入数据
EXECUTE IMMEDIATE 'CREATE TABLE target_table AS ' || v_concat_sql;
-- 删除临时表
EXECUTE IMMEDIATE 'DROP TABLE temp_table';
END;
```
这段代码会查询所有表名前缀为 `FOUNDATION_LOG_` 的表名,然后将这些表的数据拼接到一张临时表中。最后将临时表中的数据插入到一张目标表中,并删除临时表。注意,这段代码中使用了动态SQL,需要谨慎使用。
阅读全文