Fetch MULTIPLE ROWS and STORE in 1 VARIABLE - ORACLE STORED PROCEDURE

前端 未结 4 1348
故里飘歌
故里飘歌 2021-02-06 00:55

I am working on ORACLE STORED PROCEDURES and I have a doubt. I have a query which fetches more than 1 row and I want to store all those 3 row\'s values in 1 Variable. Can anybod

相关标签:
4条回答
  • 2021-02-06 01:13

    You'll need a cursor for that:

    DECLARE
        CURSOR stud_cur IS
        SELECT STUDENT_NAME FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';
    
        l_stud STUDENT.STUDENT_DETAILS%ROWTYPE;
        BEGIN
          OPEN stud_cur;
          LOOP
            FETCH stud_cur INTO l_stud;
            EXIT WHEN stud_cur%NOTFOUND;
    
            /* The first time, stud_cur.STUDENT_NAME will be Jack, then Jill... */
          END LOOP;
        CLOSE stud_cur;
    END;
    
    0 讨论(0)
  • 2021-02-06 01:31
    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;
    
    0 讨论(0)
  • 2021-02-06 01:32

    Hi all and Thank you for your time. I have resolved the question and all thanks to Ederson.

    Here is the solution :

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

    Now if you are using this in a stored procedure or PLSQL you just have to create a variable and use SELECT INTO with it and print the variable.

    Here is the code

    DECLARE
    
    C_NAMES VARCHAR2(100);
    
    BEGIN
    
       SELECT WM_CONCAT(STUDENT_NAME) INTO C_NAMES
       FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';
    
      dbms_output.put_line(sname);
    
    END;
    

    Thanks again for your help people.

    0 讨论(0)
  • 2021-02-06 01:39

    Depending on your Oracle version(>= 11G(11.2)), you can use LISTAGG:

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

    EDIT: If your Oracle version is inferior to 11G(11.2), take a look here

    0 讨论(0)
提交回复
热议问题