Esempi sui cursori
This commit is contained in:
74
cursori/CURSORI_3.sql
Normal file
74
cursori/CURSORI_3.sql
Normal file
@@ -0,0 +1,74 @@
|
||||
--Esempio di Cursore Esplicito con Ciclo LOOP
|
||||
|
||||
DECLARE
|
||||
-- CREAZIONE CURSORE
|
||||
CURSOR C_CLIENTI
|
||||
IS
|
||||
SELECT
|
||||
A.NOME
|
||||
|| ' '
|
||||
|| A.COGNOME AS Nominativo,
|
||||
B.NUMSPESE,
|
||||
B.VALTOT
|
||||
FROM
|
||||
CLIENTI A
|
||||
JOIN
|
||||
(
|
||||
SELECT
|
||||
CODFID,
|
||||
COUNT( * ) AS NUMSPESE,
|
||||
SUM(TOTALE) AS VALTOT
|
||||
FROM
|
||||
SCONTRINI
|
||||
GROUP BY
|
||||
CODFID
|
||||
)
|
||||
B
|
||||
ON
|
||||
A.CODFIDELITY = B.CODFID
|
||||
WHERE
|
||||
B.NUMSPESE > 20
|
||||
AND B.VALTOT > 200
|
||||
AND B.CODFID <> - 1
|
||||
ORDER BY
|
||||
B.VALTOT DESC;
|
||||
|
||||
V_CLIENTI C_CLIENTI%ROWTYPE;
|
||||
BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE ('Apertura Cursore');
|
||||
OPEN C_CLIENTI; -- Apertura Cursore
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE ('Fetch Cursore');
|
||||
|
||||
LOOP --Inizio del Ciclo LOOP
|
||||
FETCH
|
||||
C_CLIENTI
|
||||
INTO
|
||||
V_CLIENTI; --FETCH DEL CURSORE
|
||||
EXIT
|
||||
WHEN C_CLIENTI%NOTFOUND;
|
||||
|
||||
--DBMS_OUTPUT.PUT_LINE ('RECORD TROVATO');
|
||||
|
||||
IF V_CLIENTI.VALTOT > 400 THEN
|
||||
DBMS_OUTPUT.PUT_LINE(C_CLIENTI%ROWCOUNT || ') Il Cliente '||V_CLIENTI.Nominativo ||' ha fatto spese per ' ||
|
||||
V_CLIENTI.VALTOT || ' ed ha diritto a 10 coupon');
|
||||
ELSIF V_CLIENTI.VALTOT > 300 AND V_CLIENTI.VALTOT < 400 THEN
|
||||
DBMS_OUTPUT.PUT_LINE(C_CLIENTI%ROWCOUNT || ') Il Cliente '||V_CLIENTI.Nominativo ||' ha fatto spese per ' ||
|
||||
V_CLIENTI.VALTOT || ' ed ha diritto a 5 coupon');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE(C_CLIENTI%ROWCOUNT || ') Il Cliente '||V_CLIENTI.Nominativo ||
|
||||
' NON ha diritto ad alcun premio! ');
|
||||
END IF;
|
||||
|
||||
END LOOP;
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE ('CHIUSURA DEL CURSORE');
|
||||
CLOSE C_CLIENTI;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF C_CLIENTI%ISOPEN THEN
|
||||
CLOSE C_CLIENTI;
|
||||
END IF;
|
||||
END;
|
||||
Reference in New Issue
Block a user