如何从 SQL 填充 Local collection 并用 For LOOP 遍历?

How to fill Local collection from SQL and go over with For LOOP?

我想创建一个 本地集合,其中包含我从 select 语句 获得的值,然后使用 FOR 循环遍历它们。

我无法在 PL/SQL 块 之外定义 TYPE,因为我不应该修改我正在查询的数据库。我在 SO 中看到其他几个线程建议在 PL SQL 块之外创建一个类型。

我想用索引来遍历这些项目,因为我需要对最后一个做一些特殊的事情,我需要把它和其他的区分开来。

这是我最新尝试的简化版本:

DECLARE
    TYPE itemsTYPE IS TABLE OF MY_TABLE.ITEM%TYPE;
     items  itemsTYPE;
BEGIN
    SELECT DISTINCT ITEM INTO items
    From MY_TABLE;

    FOR currentIndex IN 1..items.Count
    LOOP

        IF currentIndex = items.Count THEN
            DBMS_OUTPUT.PUT_LINE('END');
        ELSE
            DBMS_OUTPUT.PUT_LINE(items(currentIndex));
        END IF;

    END LOOP;             

END;

在这次尝试中,我收到以下错误:

PLS-00642: local collection types not allowed in SQL statements

我理解这个错误,但我不知道如何更改我的代码以使其正常工作。

在我尝试不同的事情并遇到各种错误之前,我似乎无法找到实现我需要的正确方法。有可能吗?

改成这样:

DECLARE
    TYPE itemsTYPE IS TABLE OF MY_TABLE.ITEM%TYPE;
     items  itemsTYPE;
BEGIN
    SELECT DISTINCT ITEM BULK COLLECT INTO items
    From MY_TABLE;

    FOR currentIndex IN 1..items.Count
    LOOP

        IF currentIndex = items.Count THEN
            DBMS_OUTPUT.PUT_LINE('END');
        ELSE
            DBMS_OUTPUT.PUT_LINE(items(currentIndex));
        END IF;

    END LOOP;             

END;