我一直在寻找答案,但我似乎无法在网上找到正确的答案,我的问题就是这样。
我正在尝试从另一个表中查询一组记录,该表位于另一台机器中安装的另一个数据库中。为了更清楚:
我的存储过程在IP:192.168.XX.X1上运行。我可以在此服务器中检索我需要的所有信息,但是我有另一组信息或记录只能从IP检索:192.168.XX.X2。
我想要实现类似的目标:
DECLARE
-- given that both queries will only return 1 record
CURSOR IS curSample1
SELECT * FROM Database1.Table1;
colSample curSample1%ROWTYPE;
CURSOR IS curSample2
SELECT * FROM Database2.Table1;
colSample curSample2%ROWTYPE;
vText1 VARCHAR(20);
vText2 VARCHAR(20);
BEGIN
OPEN curSample1;
LOOP
FETCH curSample1 INTO colSample1;
EXIT WHEN curSample1%NOTFOUND;
vText1 := colSample1.Column1;
END LOOP;
CLOSE curSample1;
OPEN curSample2;
LOOP
FETCH curSample2 INTO colSample2;
EXIT WHEN curSample2%NOTFOUND;
vText2 := colSample2.Column2;
END LOOP;
CLOSE curSample2;
dbms_output.put_line(vText1 || ',' || vText2);
END;
我们非常感谢您提供的任何帮助。非常感谢你。
注意:我正在尝试这种方法,因为这是我们现在可以做到的唯一方法。再次感谢。
答案 0 :(得分:3)
您必须在数据库1和数据库2之间创建数据库链接。对于创建数据库链接,不需要在同一服务器上同时拥有这两个数据库。因为在您的情况下,数据库位于不同的服务器上,您可以从以下步骤开始。
您需要在数据库1服务器上的tnsnames.ora文件中输入tns条目(指向数据库2)。您可以通过从数据库1计算机连接到SQLPLUS到数据库2来检查是否有此条目。
sqlplus <username>/<password>@<tnsnames of database2>
如果您能够从数据库1服务器连接,则可以继续执行以下步骤来创建数据库链接。
CREATE DATABASE LINK <dblink_name> CONNECT TO <username> IDENTIFIED BY <password> USING <tnsnames of database2>
发布此文件后,您可以通过运行以下SQL命令来测试数据库链接。
select * from Table@<dblink_name>;
答案 1 :(得分:1)
我知道你不能直接在数据库中查询数据。
1,也许您可以使用 DBlink 或 DataSync 让其他数据库中的数据可以查询。
2,代替pl / sql程序,使用其他开发语言做跨数据库进程是个好主意(ex独立java程序)。3,而不是pl / sql程序,使用 Oracle Java Procedure 来执行此操作。