10

私は ORACLE STORED PROCEDURES に取り組んでいますが、疑問があります。複数の行をフェッチするクエリがあり、それらの 3 つの行の値をすべて 1 つの変数に格納したいと考えています。誰でもこれで私を助けてくれませんか。

私のクエリは次のようになります:

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

ここで、このクエリは 3 つの名前を取得します

ジャック、ジル、バニー

これら 3 つの名前をすべて 1 つの変数、つまり C_NAMES に格納したいと考えています。その後、手順の次のステップでその変数を使用しています。

誰でもこれで私を助けてくれませんか。

お時間と労力をかけていただければ幸いです。

前もって感謝します、

ヴリンダ:)

4

4 に答える 4

22
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;
于 2013-06-06T16:53:59.700 に答える
4

Oracle のバージョン (>= 11G(11.2)) によっては、LISTAGG を使用できます。

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

編集: Oracle のバージョンが 11G(11.2) より劣っている場合は、こちらをご覧ください

于 2013-06-06T16:36:55.430 に答える