![](/img/trans.png)
[英]Select id and timestamp from multiple MySQL tables with different schemas
[英]Select data from multiple tables owned by multiple schemas
SQL的技能有限,请耐心等待:-)
我有一个具有多个架构的Oracle数据库,大多数包含一个名为C_USERNAMES
的表。
我希望编写一个查询,该查询仅查询包含名为C_USERNAMES的表的架构,并基于一个或多个列数据返回行。
我可以从SYS帐户运行它。
理想情况下,我想将数据作为表单的单个格式的报表返回(假设Name
和Address
是C_USERNAMES
表中的列名):
Schema Name Address
-----------------------
SCH001 Dave Station Road
SCH006 Paul Main Ave
etc
我知道我需要某种嵌套查询或join / union,但是我无法解决任何使它起作用的问题。 我希望查询很聪明,因为它可以确定哪些模式包含表C_USERNAMES。
感谢您的指导,如果这是一个基本问题,请原谅我。
这整个设置使我感到恐惧。 您永远不应将查询作为SYS
运行。 对SQL的了解有限的人都不应靠近SYS
。 将表包含在不同的架构中,这些表格包含您希望在单个查询中组合在一起的信息,这意味着存在严重的规范化问题。 而拥有有限的SQL技能的人构建动态SQL只会增加一系列问题。
也就是说,您可以使用动态SQL来构造所需的查询。 这样的事情可能接近您想要的。
CREATE OR REPLACE FUNCTION get_all_usernames
RETURN sys_refcursor
IS
l_sql VARCHAR2(4000);
l_rc SYS_REFCURSOR;
BEGIN
FOR t IN (SELECT t.*,
rank() over (order by owner) rnk
FROM dba_tables t
WHERE table_name = 'C_USERNAMES'
ORDER BY owner)
LOOP
IF( t.rnk = 1 )
THEN
l_sql := 'SELECT name, address FROM ' ||
t.owner || '.c_usernames';
ELSE
l_sql := l_sql ||
' UNION ALL ' ||
'SELECT name, address FROM ' ||
t.owner || '.c_usernames';
END IF;
END LOOP;
OPEN l_rc
FOR l_sql;
RETURN l_rc;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.