执行游标时PLSQL FOR循环
我想知道在对游标执行SELECT值时是否有迭代表的选项 例如: 我有一个只包含数字的表TEMP_NUMBERS(单列)。 我必须从表中的每个数字中进行选择(我事先不知道表中的行数) 这就是我想要做的。显然这不起作用,但我能做些变通吗? 我需要将数据选择到p_cv_PermsNotifs中,这是一个返回参考光标执行游标时PLSQL FOR循环,plsql,cursor,Plsql,Cursor,我想知道在对游标执行SELECT值时是否有迭代表的选项 例如: 我有一个只包含数字的表TEMP_NUMBERS(单列)。 我必须从表中的每个数字中进行选择(我事先不知道表中的行数) 这就是我想要做的。显然这不起作用,但我能做些变通吗? 我需要将数据选择到p_cv_PermsNotifs中,这是一个返回参考光标 IF NOT p_cv_PermsNotifs%ISOPEN THEN OPEN p_cv_PermsNotifs FOR FOR i IN 1..TEMP_NUMBERS.NUMBER
IF NOT p_cv_PermsNotifs%ISOPEN THEN OPEN p_cv_PermsNotifs FOR
FOR i IN 1..TEMP_NUMBERS.NUMBER.COUNT LOOP
SELECT DISTINCT
SEC_USER_ROLE.ENTITY_TYP_CODE,
SEC_USER_ROLE.ENTITY_ID
FROM
SEC_USER_ROLE
WHERE
SEC_USER_ROLE.ENTITY_ID = i
END LOOP;
END IF;
我也试过:
IF NOT p_cv_PermsNotifs%ISOPEN THEN OPEN p_cv_PermsNotifs FOR
SELECT DISTINCT
SEC_USER_ROLE.ENTITY_TYP_CODE,
SEC_USER_ROLE.ENTITY_ID
FROM
SEC_USER_ROLE
WHERE
SEC_USER_ROLE.ENTITY_ID IN
(SELECT * FROM TABLE (lv_ListOfEntities))
END IF;
其中lv_ListOfEntities是由二进制整数索引的数字表。
但是我得到了“ORA-22905:无法从非嵌套表项访问行”
提前感谢。在>嘿,如果您一次只传递一个数字,那么每次都会使用refcursor 将被下一个值覆盖。所以最后你只会得到 参照光标中最后一个数字的值。更好的方法是使用 一些基本的PL/SQL批量收集逻辑将为您提供所需的 输出。 希望这有帮助
尝试了此解决方案,但我发现:ora-22905无法访问非嵌套表项中的行尝试此操作我添加了一个强制转换函数以确保不会出现此错误。是否可以将保存数字的临时表连接到sec_user_role表?
--Creating sql type
CREATE OR REPLACE TYPE lv_num_tab IS TABLE OF NUMBER;
--plsql block
var p_lst refcursor;
DECLARE
lv_num lv_num_tab;
BEGIN
SELECT COL1 BULK COLLECT INTO lv_num FROM TEMP_NUMBERS;
OPEN p_lst FOR
SELECT DISTINCT SEC_USER_ROLE.ENTITY_TYP_CODE,
SEC_USER_ROLE.ENTITY_ID
FROM SEC_USER_ROLE
WHERE SEC_USER_ROLE.ENTITY_ID IN
(SELECT * FROM TABLE(cast(lv_num as lv_num_tab))
);
END;