Oracle 用于返回列表的PLSQL流水线函数

Oracle 用于返回列表的PLSQL流水线函数,oracle,function,plsql,pipelined-function,Oracle,Function,Plsql,Pipelined Function,我正在尝试创建一个函数来从数据库中获取值列表。经过一些研究,我发现我需要使用管道函数,并找到了一些例子。我做了我的函数,但不知怎的我得到了两个错误,我不明白 这是我的密码: CREATE OR REPLACE TYPE LISTE_VALUES AS TABLE OF VARCHAR2(2000); / CREATE OR REPLACE FUNCTION F_GET_VAL( PI_1 IN VARCHAR2, PI_2 IN NUMBER,

我正在尝试创建一个函数来从数据库中获取值列表。经过一些研究,我发现我需要使用管道函数,并找到了一些例子。我做了我的函数,但不知怎的我得到了两个错误,我不明白

这是我的密码:

CREATE OR REPLACE TYPE LISTE_VALUES AS TABLE OF VARCHAR2(2000);
/    

CREATE OR REPLACE FUNCTION F_GET_VAL(
        PI_1 IN VARCHAR2,
        PI_2 IN NUMBER,
        PI_3 IN VARCHAR2)
    RETURN LISTE_VALUES PIPELINED

    IS
        W_ROW_COUNT NUMBER := 0;

    BEGIN

        FOR CUR IN (SELECT VALUE FROM TABLE 
                    WHERE ...
                      ...

                    )

        LOOP
            PIPE ROW (CUR);
            W_ROUNT_COUNT := W_ROW_COUNT + 1;
        END LOOP;

        DBMS_OUTPUT.PUT_LINE('There were '
                            || W_ROW_COUNT
                            || ' rows selected' );

    END F_GET_VAL;
    /
以下是我得到的错误:

[错误]PLS-00382:PLS-00382:表达式类型错误(在 管线:管排(CUR);)

[错误]PLS-00201:PLS-00201:标识符“W\u ROUNT\u COUNT”必须为 宣布

(在行:W_ROUNT_COUNT:=W_ROW_COUNT+1;)

对于第一个错误,我进行了三次检查,表中的
VALUE
有一个类型
VARCHAR2(2000)
,与我在开始时声明的类型完全相同(一个
VARCHAR2(2000)

第二,我不明白,因为我在IS语句中声明了变量
W\u ROW\u COUNT

如果有人能帮我,那就太好了!
谢谢

可以为单行创建
管道行
,而不是为包含整个记录集的游标名称变量创建管道行

只用

管道行(当前值)

代替
管排(cur)

您还可以将查询输出存储到集合中,然后通过管道传输每个元素

关于由于
W_ROW_COUNT
而导致的错误,这是一个打字错误。您在添加时错误地将其用作
W\u ROUNT\u COUNT


非常感谢您的明确回答,现在它完全起作用了:)我的第二个错误很糟糕。。。我没看见!请注意,
cur
这里是一个记录变量,而不是光标。@JeffreyKemp:谢谢,我希望现在我的措辞恰当。