-- 查看当前正在通过dblink执行的SQL
SELECT s.sid, s.username, s.machine, s.program, s.sql_id, t.sql_text
FROM v$session s, v$sql t
WHERE s.sql_id = t.sql_id
AND UPPER(t.sql_text) LIKE '%DBLINK_NAME%'; -- 替换为你的dblink名称
×错误示范(循环):
BEGIN
FOR rec IN (SELECT id FROM local_table) LOOP
SELECT remote_column INTO v_var
FROM remote_table@dblink
WHERE remote_id = rec.id; -- 每次循环一次网络往返!
...
END LOOP;
END;
√正确示范(批量):
BEGIN
-- 一次网络往返,获取所有数据
INSERT INTO local_temp_table (id, remote_data)
SELECT r.id, r.remote_column
FROM remote_table@dblink r, local_table l
WHERE r.id = l.id;
-- 然后在本地处理
FOR rec IN (SELECT * FROM local_temp_table) LOOP
...
END LOOP;
END;
-减少数据传输量:
只选择需要的列:SELECT col1, col2 FROM ... 而不是 SELECT * FROM ...。