我试图创建一个脚本,它可以选择一个值列表,将它们放入数组,然后迭代数组,以便删除所选的值。我想我最终只是把自己弄糊涂了,但我最大的问题似乎是弄清楚如何将值选择到数组中。在我看到的其他示例中,人们静态定义数组,而不是使用select语句。
我试着创建了一个FOR循环,如下所示:
DECLARE
type PERMIDS IS VARRAY(10) OF VARCHAR2(10);
ID PERMIDS;
total integer;
BEGIN
ID := PERMIDS('1','2','3','4','5');
total := ID.count;
FOR i in 1 .. total LOOP
SYS.DBMS_OUTPUT.PUT_LINE('ID: ' || ID(i));
END LOOP;
END;
这将运行,但不允许动态定义数组。
我想做的是这样的事情,选择语句可能产生任意数量的结果:
DECLARE
type PERMIDS IS VARRAY(10) OF VARCHAR2(10);
ID PERMIDS;
total integer;
BEGIN
SELECT rg.ID INTO ID
FROM table1 rg
LEFT JOIN table2 a
ON rg.ID = a.ID
WHERE a.ID = '1234';
total := ID.count;
FOR i in 1 .. total LOOP
SYS.DBMS_OUTPUT.PUT_LINE('ID: ' || ID(i));
END LOOP;
END;
重要的是,这个循环可以处理来自select语句的任意数量的结果,包括0,因为用户可以有任意数量的记录。
1条答案
按热度按时间krcsximq1#
一种选择是使用内置的
sys.odcivarchar2list
类型并将bulk collect
添加到其中。样表(部门名称将放入集合):
PL/SQL过程: