我在使用Oracle 10中的跨数据库链接(select into insert across a dblink)时遇到了一些麻烦。 我正在使用以下语句:
INSERT INTO LOCAL.TABLE_1 ( COL1, COL2)
SELECT COL1, COL2
FROM REMOTE.TABLE1@dblink s
WHERE COL1 IN ( SELECT COL1 FROM WORKING_TABLE)
当我运行该语句时,在DB链接上远程服务器运行以下内容:
SELECT /*+ OPAQUE_TRANSFORM */ "COL1", "COL2"
FROM "REMOTE"."TABLE1" "S"
如果我只运行查询而不进行以下的插入,则会运行:
SELECT /*+ */ "A1"."COL1"
, "A1"."COL2"
FROM "REMOTE"."TABLE1" "A1"
WHERE "A1"."COL1" =
ANY ( SELECT "A2"."COL1"
FROM "LOCAL"."TABLE1"@! "A2")
问题在于,在插入数据的情况下,整个表格都将通过dblink拉取,然后在本地进行限制,这需要相当长的时间,考虑到表格的大小。是否有任何原因使添加插入会改变这种行为方式?