From 585372ff49a0f9f46382ba621faa074cc31e18bc Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Wed, 25 Sep 2019 21:13:58 +0200 Subject: [PATCH] Esempi sulle collezioni e i record --- collezioni/COLLEZIONI_1.sql | 59 ++++++++++++++++++++++++ collezioni/COLLEZIONI_2.sql | 89 +++++++++++++++++++++++++++++++++++++ collezioni/COLLEZIONI_3.sql | 83 ++++++++++++++++++++++++++++++++++ record/RECORD_1.sql | 19 ++++++++ record/RECORD_2.sql | 42 +++++++++++++++++ record/RECORD_3.sql | 50 +++++++++++++++++++++ record/RECORD_4.sql | 63 ++++++++++++++++++++++++++ 7 files changed, 405 insertions(+) create mode 100644 collezioni/COLLEZIONI_1.sql create mode 100644 collezioni/COLLEZIONI_2.sql create mode 100644 collezioni/COLLEZIONI_3.sql create mode 100644 record/RECORD_1.sql create mode 100644 record/RECORD_2.sql create mode 100644 record/RECORD_3.sql create mode 100644 record/RECORD_4.sql diff --git a/collezioni/COLLEZIONI_1.sql b/collezioni/COLLEZIONI_1.sql new file mode 100644 index 0000000..2d6532b --- /dev/null +++ b/collezioni/COLLEZIONI_1.sql @@ -0,0 +1,59 @@ +--Esempio di Index-by table +DECLARE + CURSOR C_CLIENTI + IS + SELECT + AA.* + FROM + ( + SELECT + A.NOME + || ' ' + || A.COGNOME AS NOMINATIVO + 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 > 0 + AND B.CODFID <> - 1 + ORDER BY + B.VALTOT DESC + ) + AA + WHERE + ROWNUM <= 10; + + --CREAZIONE NUOVA INDEX-BY TABLE + TYPE NOMINATIVO_TYPE +IS + TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER; + + NOMINATIVO_TAB NOMINATIVO_TYPE; + V_INDEX PLS_INTEGER := 0; + +BEGIN + + FOR R_CLIENTI IN C_CLIENTI + LOOP + V_INDEX := V_INDEX + 1; + + NOMINATIVO_TAB(V_INDEX) := R_CLIENTI.NOMINATIVO; + + DBMS_OUTPUT.PUT_LINE ('RECORD(' || V_INDEX || '): ' || ' ' || NOMINATIVO_TAB(V_INDEX)); + END LOOP; + + DBMS_OUTPUT.PUT_LINE ('record(' || 11 || '):' || NOMINATIVO_TAB(11)); +END; \ No newline at end of file diff --git a/collezioni/COLLEZIONI_2.sql b/collezioni/COLLEZIONI_2.sql new file mode 100644 index 0000000..fba2b9f --- /dev/null +++ b/collezioni/COLLEZIONI_2.sql @@ -0,0 +1,89 @@ +--Esempio di NESTED TABLE +DECLARE + CURSOR C_CLIENTI + IS + SELECT + AA.* + FROM + ( + SELECT + A.NOME + || ' ' + || A.COGNOME AS NOMINATIVO + 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 > 0 + AND B.CODFID <> - 1 + ORDER BY + B.VALTOT DESC + ) + AA + WHERE + ROWNUM <= 10; + + --CREAZIONE NUOVA NESTED TABLE + TYPE NOMINATIVO_TYPE +IS + TABLE OF VARCHAR2(100); + NOMINATIVO_TAB NOMINATIVO_TYPE := NOMINATIVO_TYPE(); + + V_INDEX PLS_INTEGER := 0; + +BEGIN + FOR R_CLIENTI IN C_CLIENTI + LOOP + V_INDEX := V_INDEX + 1; + + NOMINATIVO_TAB.EXTEND; + NOMINATIVO_TAB(V_INDEX) := R_CLIENTI.NOMINATIVO; + + DBMS_OUTPUT.PUT_LINE ('RECORD(' || V_INDEX || '): ' || ' ' || NOMINATIVO_TAB(V_INDEX)); + + END LOOP; + + NOMINATIVO_TAB.EXTEND; + NOMINATIVO_TAB(11) := 'NICOLA LA ROCCA'; + + IF NOMINATIVO_TAB.EXISTS(11) THEN + DBMS_OUTPUT.PUT_LINE ('RECORD(' || 11 || '): ' || NOMINATIVO_TAB(11)); + END IF; + + + NOMINATIVO_TAB.EXTEND; + IF NOMINATIVO_TAB.EXISTS(12) THEN + DBMS_OUTPUT.PUT_LINE ('RECORD(' || 12 || '):' || NOMINATIVO_TAB(12)); + END IF; + + DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT); + + NOMINATIVO_TAB.DELETE(12); + + DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT); + + DBMS_OUTPUT.PUT_LINE ('Primo Record: ' || NOMINATIVO_TAB.FIRST); + DBMS_OUTPUT.PUT_LINE ('Ultimo Record: ' || NOMINATIVO_TAB.LAST); + + NOMINATIVO_TAB.TRIM(3); + + FOR i IN 1..NOMINATIVO_TAB.LAST + LOOP + DBMS_OUTPUT.PUT_LINE ('RECORD(' || i || '): ' || ' ' || NOMINATIVO_TAB(i)); + END LOOP; + + +END; \ No newline at end of file diff --git a/collezioni/COLLEZIONI_3.sql b/collezioni/COLLEZIONI_3.sql new file mode 100644 index 0000000..fa521d3 --- /dev/null +++ b/collezioni/COLLEZIONI_3.sql @@ -0,0 +1,83 @@ +--Esempio di varray +DECLARE + CURSOR c_clienti + IS + SELECT + AA.* + FROM + ( + SELECT + A.NOME + || ' ' + || A.COGNOME AS Nominativo + 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 > 0 + AND B.CODFID <> - 1 + ORDER BY + B.VALTOT DESC + ) + AA + WHERE + rownum <= 10; + + --CREAZIONE NUOVA VARRAY + TYPE nominativo_type IS VARRAY(11) OF VARCHAR2(100); + nominativo_tab nominativo_type := nominativo_type(); + + v_index PLS_INTEGER := 0; + +BEGIN + FOR r_clienti IN c_clienti + LOOP + v_index := v_index + 1; + + nominativo_tab.EXTEND; + nominativo_tab(v_index) := r_clienti.Nominativo; + + DBMS_OUTPUT.PUT_LINE ('RECORD(' || v_index || '): ' || ' ' || nominativo_tab(v_index)); + + END LOOP; + + + nominativo_tab.EXTEND; + nominativo_tab(11) := 'NICOLA LA ROCCA'; + + IF NOMINATIVO_TAB.EXISTS(11) THEN + DBMS_OUTPUT.PUT_LINE ('RECORD(' || 11 || '): ' || nominativo_tab(11)); + END IF; + + /* + nominativo_tab.EXTEND; + IF NOMINATIVO_TAB.EXISTS(12) THEN + DBMS_OUTPUT.PUT_LINE ('RECORD(' || 12 || '):' || nominativo_tab(12)); + END IF; + DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT); + nominativo_tab.DELETE(12); + DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT); + DBMS_OUTPUT.PUT_LINE ('Primo Record: ' || NOMINATIVO_TAB.FIRST); + DBMS_OUTPUT.PUT_LINE ('Ultimo Record: ' || NOMINATIVO_TAB.LAST); + NOMINATIVO_TAB.TRIM(3); + FOR i IN 1..NOMINATIVO_TAB.LAST + LOOP + DBMS_OUTPUT.PUT_LINE ('RECORD(' || i || '): ' || ' ' || nominativo_tab(i)); + END LOOP; + */ + + +END; \ No newline at end of file diff --git a/record/RECORD_1.sql b/record/RECORD_1.sql new file mode 100644 index 0000000..2d87f7a --- /dev/null +++ b/record/RECORD_1.sql @@ -0,0 +1,19 @@ +-- Esempio di Table Based Record + +DECLARE + ARTICOLO_REC ARTICOLI%ROWTYPE; +BEGIN + SELECT + * + INTO + ARTICOLO_REC + FROM + ARTICOLI + WHERE + CODART = '001122501'; + + DBMS_OUTPUT.PUT_LINE ('Codice: '||ARTICOLO_REC.CODART); + DBMS_OUTPUT.PUT_LINE ('Descrizione: '||ARTICOLO_REC.DESCRIZIONE); + DBMS_OUTPUT.PUT_LINE ('Pezzi x Cartone: '||ARTICOLO_REC.PZCART); + +END; \ No newline at end of file diff --git a/record/RECORD_2.sql b/record/RECORD_2.sql new file mode 100644 index 0000000..f9ca382 --- /dev/null +++ b/record/RECORD_2.sql @@ -0,0 +1,42 @@ +-- Esempio di Cursor Based Record +DECLARE + CURSOR ARTICOLI_CUR + IS + SELECT + AA.* + FROM + ( + SELECT + CODART, + DESCRIZIONE, + PZCART, + DATACREAZIONE + FROM + ARTICOLI + WHERE + IDFAMASS = '10' + ) + AA + WHERE + ROWNUM <= 30; + + ARTICOLI_REC ARTICOLI_CUR%ROWTYPE; +BEGIN + --Apertura Cursore + OPEN ARTICOLI_CUR; + + LOOP + FETCH + ARTICOLI_CUR + INTO + ARTICOLI_REC; + EXIT + WHEN ARTICOLI_CUR%NOTFOUND; + DBMS_OUTPUT.PUT_LINE ('Articolo: '||ARTICOLI_REC.CODART||'-'||ARTICOLI_REC.DESCRIZIONE); + DBMS_OUTPUT.PUT_LINE ('Pezzi x Cartone: '||ARTICOLI_REC.PZCART); + DBMS_OUTPUT.PUT_LINE ('Data Creazione: '||TO_CHAR(ARTICOLI_REC.DATACREAZIONE,'DD/MM/YYYY')); + END LOOP; + + CLOSE ARTICOLI_CUR; + +END; \ No newline at end of file diff --git a/record/RECORD_3.sql b/record/RECORD_3.sql new file mode 100644 index 0000000..643b3ee --- /dev/null +++ b/record/RECORD_3.sql @@ -0,0 +1,50 @@ +-- Esempio di Record creati dall'utente +DECLARE + -- 1°Record definito dall'utente +TYPE CARD_TYPE +IS + RECORD + ( + CODFIDELITY VARCHAR2(20), + BOLLINI NUMBER, + ULTIMASPESA DATE ); + + -- 2°Record definito dall'utente +TYPE CLIENTI_TYPE +IS + RECORD + ( + CARD CARD_TYPE, + NOMINATIVO VARCHAR2(100), + PROVINCIA VARCHAR2(3) ); + + CLIENTI_REC CLIENTI_TYPE; + +BEGIN + + SELECT + A.CODFIDELITY, + A.NOME + || ' ' + || A.COGNOME, + A.PROV, + A.BOLLINI, + A.ULTIMASPESA + INTO + CLIENTI_REC.CARD.CODFIDELITY, + CLIENTI_REC.NOMINATIVO, + CLIENTI_REC.PROVINCIA, + CLIENTI_REC.CARD.BOLLINI, + CLIENTI_REC.CARD.ULTIMASPESA + FROM + VW_CLIENTI A + WHERE + a.CODFIDELITY = '67100724'; + + DBMS_OUTPUT.PUT_LINE ('NOMINATIVO: '||CLIENTI_REC.NOMINATIVO); + DBMS_OUTPUT.PUT_LINE ('CodFid: '||CLIENTI_REC.CARD.CODFIDELITY); + DBMS_OUTPUT.PUT_LINE ('BOLLINI: '||CLIENTI_REC.CARD.BOLLINI); + DBMS_OUTPUT.PUT_LINE ('Ultima Spesa: '||CLIENTI_REC.CARD.ULTIMASPESA); + DBMS_OUTPUT.PUT_LINE ('Prov: '||CLIENTI_REC.PROVINCIA); + +END; \ No newline at end of file diff --git a/record/RECORD_4.sql b/record/RECORD_4.sql new file mode 100644 index 0000000..2eeacae --- /dev/null +++ b/record/RECORD_4.sql @@ -0,0 +1,63 @@ +--Esempio di collezione di record definiti dall'utente +DECLARE + + CURSOR CLIENTI_CUR + IS + SELECT + CODFIDELITY, + NOME + || ' ' + || COGNOME AS NOMINATIVO, + BOLLINI, + PROV + FROM + VW_CLIENTI + WHERE + CODFIDELITY IN + ( + SELECT DISTINCT + CODFID + FROM + SCONTRINI + GROUP BY + CODFID + HAVING + SUM(BOLLINI) > 500 + ) + ORDER BY + BOLLINI DESC; + +TYPE BEST_CLIFID_RECORD +IS + RECORD + ( + CODFID VARCHAR(20), + NOMINATIVO VARCHAR2(100), + BOLLINI NUMBER, + PROVINCIA VARCHAR2(3) ); + +TYPE CLIFID_ARRAY_TYPE +IS + TABLE OF BEST_CLIFID_RECORD INDEX BY PLS_INTEGER; + + CLIFID_TAB CLIFID_ARRAY_TYPE; + V_INDEX INTEGER := 0; + +BEGIN + FOR CLIENTI_REC IN CLIENTI_CUR + LOOP + V_INDEX := V_INDEX + 1; + + CLIFID_TAB(V_INDEX).CODFID := CLIENTI_REC.CODFIDELITY; + CLIFID_TAB(V_INDEX).NOMINATIVO := CLIENTI_REC.NOMINATIVO; + CLIFID_TAB(V_INDEX).BOLLINI := CLIENTI_REC.BOLLINI; + CLIFID_TAB(V_INDEX).PROVINCIA := CLIENTI_REC.PROV; + + DBMS_OUTPUT.PUT_LINE ('Posizione: '|| V_INDEX); + DBMS_OUTPUT.PUT_LINE ('NOMINATIVO: '||CLIFID_TAB(V_INDEX).NOMINATIVO); + DBMS_OUTPUT.PUT_LINE ('CODFID: '||CLIFID_TAB(V_INDEX).CODFID); + DBMS_OUTPUT.PUT_LINE ('BOLLINI: '||CLIFID_TAB(V_INDEX).BOLLINI); + DBMS_OUTPUT.PUT_LINE ('Prov: '||CLIFID_TAB(V_INDEX).PROVINCIA); + + END LOOP; +END; \ No newline at end of file