我有各种 Oracle 数据库,例如 ONE.db TWO.db THIRD.db 等,我想运行一个在 ONE.db 上成功运行的 SELECTSELECT * FROM CUSTOMERS
等,然后获取每个数据库的结果。如何使用 PL/SQL 做到这一点?(没有数据库链接或工具等)
问问题
3555 次
1 回答
3
假设您谈论的是模式,而不是单独的数据库实例,并且假设所有 CUSTOMERS 表的结构完全相同(包括列顺序),您可以以对所有表具有 SELECT 访问权限的用户身份登录,然后:
SELECT 'ONE' owner, c.* FROM one.customers c
UNION ALL
SELECT 'TWO' owner, c.* FROM two.customers c
UNION ALL
SELECT 'THIRD' owner, c.* FROM third.customers c
;
您是否需要第一列“所有者”取决于您。
如果您想在运行时使用 PL/SQL 生成上述语句,您可以执行以下操作:
DECLARE
qry VARCHAR2(32767);
rc sys_refcursor;
BEGIN
FOR r IN (SELECT owner, table_name
FROM all_tables
WHERE table_name = 'CUSTOMERS') LOOP
IF qry IS NOT NULL THEN
qry := qry || ' UNION ALL ';
END IF;
qry := qry || 'SELECT '''
|| r.owner
|| ''' owner, c.* FROM '
|| r.owner
|| '.customers c';
END LOOP;
OPEN rc FOR qry;
-- fetch from the ref cursor and do whatever you want with the records
END;
于 2012-08-23T03:28:47.560 回答