Oracle 如何从多个数据库链接中获取数据,并使用LOOP将其插入到特定表中
我有Oracle数据库,它有多个DB_链接 这些数据库链接存储在本地(数据库链接TBL)表中 目标是将远程数据与本地计算机同步 我使用循环和REF_游标插入完成了任务,但无法将REF_游标插入表中 数据库链接表:Oracle 如何从多个数据库链接中获取数据,并使用LOOP将其插入到特定表中,oracle,plsql,bulkinsert,execute-immediate,sys-refcursor,Oracle,Plsql,Bulkinsert,Execute Immediate,Sys Refcursor,我有Oracle数据库,它有多个DB_链接 这些数据库链接存储在本地(数据库链接TBL)表中 目标是将远程数据与本地计算机同步 我使用循环和REF_游标插入完成了任务,但无法将REF_游标插入表中 数据库链接表: CREATE TABLE DB_LINKS_TBL(DB_Link_Name VARCHAR2(50)); INSERT INTO DB_LINKS_TBL VALUES ('CAIRO_DB'); INSERT INTO DB_LINKS_TBL VALUES ('ALEX_DB')
CREATE TABLE DB_LINKS_TBL(DB_Link_Name VARCHAR2(50));
INSERT INTO DB_LINKS_TBL VALUES ('CAIRO_DB');
INSERT INTO DB_LINKS_TBL VALUES ('ALEX_DB');
从CAIRO_DB、ALEX_DB同步数据的过程:
DECLARE
CURSOR C_DB_LINK IS
SELECT DB_Link_Name FROM DB_LINKS_TBL ;
L_Returnvalue SYS_REFCURSOR;
L_Sql VARCHAR2(10000);
BEGIN
--------------------#
FOR db IN C_DB_LINK LOOP
----------------
L_Sql := 'SELECT Emp_Id, Emp_Name
FROM EMPS
WHERE NOT EXISTS ( SELECT ''X''
FROM EMPS@'||db.DB_Link_Name||' D
WHERE D.Emp_Id = S.Emp_Id) ';
OPEN L_Returnvalue FOR L_Sql ;
----------------
INSERT INTO EMPS VALUES (L_Returnvalue);
COMMIT;
----------------
END LOOP;
--------------------#
END;
我不会为此使用
SYS\u REFCURSOR
。直接插入即可
L_Sql := 'INSERT INTO emps( emp_id, emp_name )
SELECT Emp_Id, Emp_Name
FROM EMPS
WHERE NOT EXISTS ( SELECT ''X''
FROM EMPS@'||db.DB_Link_Name||' D
WHERE D.Emp_Id = S.Emp_Id) ';
execute immediate l_sql;
不过,退一步说,您确定这样做在架构上有意义吗?Oracle提供了物化视图之类的功能来在环境之间复制数据,并且如果可以在多个源系统上修改单个行,则具有多主机复制功能。滚动您自己的自定义复制解决方案很少有意义。创建一个记录类型,并使用它而不是ref cursor。