【发布时间】:2011-03-28 13:57:44
【问题描述】:
编辑:更改标题以适合下面的代码。
我正在尝试从 Oracle 表中检索可接受值的列表,然后在将某些字段与所述列表进行比较时对另一个执行 SELECT。
我试图用光标(如下所示)执行此操作,但失败了。
DECLARE
TYPE gcur IS REF CURSOR;
TYPE list_record IS TABLE OF my_table.my_field%TYPE;
c_GENERIC gcur;
c_LIST list_record;
BEGIN
OPEN c_GENERIC FOR
SELECT my_field FROM my_table
WHERE some_field = some_value;
FETCH c_GENERIC BULK COLLECT INTO c_LIST;
-- try to check against list
SELECT * FROM some_other_table
WHERE some_critical_field IN c_LIST;
END
基本上,我要做的是将可接受的值列表缓存到一个变量中,因为我稍后会反复检查它。
您如何在 Oracle 中执行此操作?
【问题讨论】:
-
令人讨厌的是,如果您的最终操作是 UPDATE 或 DELETE,您的代码将完美运行 - 只有 SELECT 不接受批量绑定作为输入。
-
顺便说一句,你有资源泄漏 - 没有关闭参考光标。为什么不是好旧的本地光标?