有3个表(TB 1、TB 2、TB 3)
sql> SELECT table_name FROM user_tables
TB1
TB2
TB3
所有表都有相同的列,如
(name电子邮件电话)
我希望通过循环将所有email
的值放入user_tables
中,
预期结果是联合所有表的email
,如下所示
xxx@gmail.com 来自TB 1
yyy@gmail.com 来自TB 1
zzz@gmail.com 来自TB 2
abc@gmail.com 来自TB 3
...
这是我尝试但失败的SQL脚本:
BEGIN
FOR get_table_list IN ( SELECT table_name FROM user_tables)
LOOP
EXECUTE IMMEDIATE 'SELECT email from ' || get_table_list;
EXECUTE IMMEDIATE 'UNION ALL';
END LOOP;
END;
错误消息:
Error report -
ORA-06550: line 4, column 27:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 4, column 9:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
2条答案
按热度按时间hgtggwj01#
假设所有的表都有一个
email
列,然后循环遍历这些表并构建SQL,然后调用EXECUTE IMMEDIATE
一次:其中,对于样本数据:
输出:
如果没有收藏:
或
其输出相同。
fiddle
mwg9r5ms2#
为什么不是一个简单的联盟?
为什么你认为你需要PL/SQL?