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 ;
/
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;
/