【发布时间】:2014-01-08 23:12:10
【问题描述】:
我在db1 上有一个table1。我在 'db2. Thetable2` 上有另一个表 table2 正在通过 dblink 在 plsql 过程中使用。
我使用游标从table1 获取所有主键,这样我的变量ar_col 就是table1 的PK 列表。
现在我想从table2 中获取这些值的所有值。万一我在table2 中没有值,我的结果中至少应该有来自table1 的pk。
我使用了以下查询,但它返回空白
SELECT t1.col1, t2.col1, t2.col2, t2.col3,
FROM table1 t1
LEFT OUTER JOIN table2@db_link t2
ON t2.col1 = t1.col1
WHERE t2.col1 IN (ar_col);
我想在 for 循环中使用结果,因此我将在此查询中使用批量收集。 ar_col 是包含 table1 的所有 pks 的数组
附注:
ar_column的定义是
TYPE t_column IS TABLE OF TABLE_1.COLUMN_1%TYPE INDEX BY PLS_INTEGER;
ar_column t_column;
P.S2:ar_column 没有所有主键,仅根据某些条件选择。
【问题讨论】:
-
如果
ar_col只是来自table1的值的集合,那么在SQL 语句中同时使用集合和表的目的是什么?您发布的查询也不是有效的语法,但如果您得到 0 行的结果,这意味着您没有收到错误,这意味着您发布的查询与您正在运行的查询不同。 -
ar_col 是根据一些动态标准填充的,结果仍然是来自
table1的pk,但很少。所以总结一下,我首先必须从table1中找到特定的primary_keys。然后我必须从table2中找到那些pk的尊重记录。 -
好的。所以你没有得到“所有的主键”,对吧?您的查询是否返回错误?因为,正如我所说,您发布的语法无效。但是您并不是说您遇到了语法错误。
ar_col的定义是什么? -
没有语法错误。我削减了我原来的查询,所以可能是一个错字。我首先尝试在 plsql 上运行它,结果为 0。