plsql oracle语法 查询所有表名前缀为FOUNDATION_LOG_的表名 放入结果集 对该结果集进行循环 使用union all将所有的表数据拼接到一张表中
时间: 2024-03-11 08:48:22 浏览: 92
你可以使用以下SQL语句来实现查询所有表名前缀为FOUNDATION_LOG_的表名并将它们的数据拼接到一张表中:
```
DECLARE
sql_query VARCHAR2(200);
table_name VARCHAR2(30);
output_table VARCHAR2(30) := 'MY_OUTPUT_TABLE';
BEGIN
FOR c IN (SELECT table_name FROM user_tables WHERE table_name LIKE 'FOUNDATION_LOG_%') LOOP
table_name := c.table_name;
sql_query := 'INSERT INTO ' || output_table || ' SELECT * FROM ' || table_name;
EXECUTE IMMEDIATE sql_query;
END LOOP;
END;
```
这段PL/SQL代码会遍历所有表名前缀为FOUNDATION_LOG_的表,将它们的数据插入到名为MY_OUTPUT_TABLE的表中。请注意,你需要将MY_OUTPUT_TABLE替换为你想要使用的表名。
相关问题
plsql oracle语法 查询所有表名前缀为FOUNDATION_LOG_的表名 放入结果集 对该结果集进行循环 将所有的表数据拼接到一张表中
您可以使用以下PL/SQL代码查询所有表名前缀为FOUNDATION_LOG_的表名,并将其存储在一个游标中:
```sql
DECLARE
TYPE table_name_list IS TABLE OF VARCHAR2(30);
table_names table_name_list;
CURSOR c_tables IS
SELECT table_name
FROM all_tables
WHERE table_name LIKE 'FOUNDATION_LOG\_%' ESCAPE '\';
BEGIN
OPEN c_tables;
FETCH c_tables BULK COLLECT INTO table_names;
CLOSE c_tables;
FOR i IN table_names.FIRST..table_names.LAST LOOP
-- 在此处执行将所有表数据拼接到一张表中的操作
DBMS_OUTPUT.PUT_LINE('Table Name: ' || table_names(i));
END LOOP;
END;
```
在上面的代码中,游标`c_tables`用于查询符合条件的表名并将其存储在`table_names`数组中。然后,您可以使用循环遍历该数组,并在循环体中执行将所有表数据拼接到一张表中的操作。注意,此处使用`DBMS_OUTPUT.PUT_LINE`语句打印每个表名,您可以根据需要进行更改。
plsql 查询所有表名前缀为FOUNDATION_LOG_的表名 放入结果集 对该结果集进行循环 将所有的表数据拼接到一张表中
可以使用以下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,需要谨慎使用。
阅读全文