在1个VARIABLE - ORACLE STORED PROCEDURE中获取多行和存储

vri*_*tia 9 oracle variables stored-procedures multirow

我正在研究ORACLE STORED PROCEDURES,我有一个疑问.我有一个查询,它获取超过1行,我想将所有这3行的值存储在1个变量中.任何人都可以帮助我.

我的QUERY是这样的:

SELECT STUDENT_NAME FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';

此查询在此处获取3个名称

杰克,吉尔,兔子

我希望所有这3个名字都存储在1个变量中,即C_NAMES.之后我在我的程序的后续步骤中使用该变量.

任何人都可以帮我这个.

我非常感谢您的时间和精力.

提前致谢,

温达:)

the*_*slk 21

CREATE PROCEDURE a_proc
AS
    CURSOR names_cur IS
        SELECT  student_name
        FROM    student.student_details
        WHERE   class_id = 'C';

    names_t  names_cur%ROWTYPE;
    TYPE names_ntt IS TABLE OF names_t%TYPE; -- must use type
    l_names  names_ntt;
BEGIN
    OPEN  names_cur;
    FETCH names_cur BULK COLLECT INTO l_names;
    CLOSE names_cur;

    FOR indx IN 1..l_names.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(l_names(indx).student_name);
    END LOOP;
END a_proc;
Run Code Online (Sandbox Code Playgroud)

  • 我认为在**TYPE names_ntt IS TABLE OF names_t之后需要在'names_t'中添加'%TYPE';** (2认同)
  • 您的代码不是100%正确,这是我上面的用户说的错误。您需要使用“ TYPE names_ntt IS TABLE OF names_cur%ROWTYPE;”并删除“ names_t names_cur%ROWTYPE;”。 (2认同)

Ede*_*son 5

根据您的 Oracle 版本(>= 11G(11.2)),您可以使用 LISTAGG:

SELECT LISTAGG(STUDENT_NAME,',')  WITHIN GROUP (ORDER BY STUDENT_NAME)
FROM STUDENT.STUDENT_DETAILS
WHERE CLASS_ID= 'C';
Run Code Online (Sandbox Code Playgroud)

编辑:如果您的 Oracle 版本低于 11G(11.2),请查看此处