Search code examples
oracle-databasestored-proceduresplsqlprocedureoracle18c

PL/SQL error with cursor, ERROR ORA-06550


I'm studying PL/SQL and I'm trying to create a procedure, but I'm having problems with the cursor and I don't know what it is, if you can help with my code I'll be grateful.

take a look in my code

DECLARE
TYPE T_CURSOR IS REF CURSOR;
V_CURSOR T_CURSOR;
V_STATION STATION_DATA%ROWTYPE;
BEGIN
  OPEN V_CURSOR FOR SELECT * FROM STATION_DATA;
   FETCH V_CURSOR INTO V_STATION;
    EXIT WHEN V_CURSOR%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(
    'STATION NUMBER = '||V_STATION.STATION_NUMBER||
    'REPORT CODE = '||V_STATION.REPORT_CODE||
    'YEAR = '||V_STATION.YEAR||
    'MONTH = '||V_STATION.MONTH||
    'DAY = ' ||V_STATION.DAY||
    'DEW POINT = '||V_STATION.DEW_POINT||
    'STATION PRESSURE = '||V_STATION.STATION_PRESSURE||
    'VISIBILITY = '||V_STATION.VISIBILITY||
    'WIND SPEED = '||V_STATION.WIND_SPEED||
    'PRECIPATION = '||V_STATION.PRECIPATION||
    'TEMPERATURE = '||V_STATION.TEMPERATURE||
    'SNOW DEPTH = '||V_STATION.SNOW_DEPTH||
    'FOG = '||V_STATION.FOG||
    'RAIN = '||V_STATION.RAIN||
    'HAIL = '||V_STATION.HAIL||
    'THUNDER = '||V_STATION.THUNDER||
    'TORNADO = '||V_STATION.TORNADO
    );
    END LOOP    ;
  CLOSE V_CURSOR ;
 END ;
/ 

Solution

  • Your code is missing the LOOP statement and also some code that is not needed.

    You need something like this (see inline comments):

    DECLARE
    --    TYPE T_CURSOR IS REF CURSOR; -- YOU DON'T NEED THIS
        V_CURSOR    SYS_REFCURSOR; -- USE SYS_REFCURSOR
        V_STATION   STATION_DATA%ROWTYPE;
    BEGIN
        OPEN V_CURSOR FOR SELECT *
                            FROM STATION_DATA;
        LOOP -- ADDED THIS
            FETCH V_CURSOR INTO V_STATION;
            EXIT WHEN V_CURSOR%NOTFOUND;
            DBMS_OUTPUT.PUT_LINE(
                    'STATION NUMBER = '||V_STATION.STATION_NUMBER||
                    'REPORT CODE = '||V_STATION.REPORT_CODE||
                    'YEAR = '||V_STATION.YEAR||
                    'MONTH = '||V_STATION.MONTH||
                    'DAY = ' ||V_STATION.DAY||
                    'DEW POINT = '||V_STATION.DEW_POINT||
                    'STATION PRESSURE = '||V_STATION.STATION_PRESSURE||
                    'VISIBILITY = '||V_STATION.VISIBILITY||
                    'WIND SPEED = '||V_STATION.WIND_SPEED||
                    'PRECIPATION = '||V_STATION.PRECIPATION||
                    'TEMPERATURE = '||V_STATION.TEMPERATURE||
                    'SNOW DEPTH = '||V_STATION.SNOW_DEPTH||
                    'FOG = '||V_STATION.FOG||
                    'RAIN = '||V_STATION.RAIN||
                    'HAIL = '||V_STATION.HAIL||
                    'THUNDER = '||V_STATION.THUNDER||
                    'TORNADO = '||V_STATION.TORNADO
                    );
        END LOOP;
        CLOSE V_CURSOR;
    END;
    /