Esempi sulle collezioni e i record
This commit is contained in:
59
collezioni/COLLEZIONI_1.sql
Normal file
59
collezioni/COLLEZIONI_1.sql
Normal file
@@ -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;
|
||||||
89
collezioni/COLLEZIONI_2.sql
Normal file
89
collezioni/COLLEZIONI_2.sql
Normal file
@@ -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;
|
||||||
83
collezioni/COLLEZIONI_3.sql
Normal file
83
collezioni/COLLEZIONI_3.sql
Normal file
@@ -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;
|
||||||
19
record/RECORD_1.sql
Normal file
19
record/RECORD_1.sql
Normal file
@@ -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;
|
||||||
42
record/RECORD_2.sql
Normal file
42
record/RECORD_2.sql
Normal file
@@ -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;
|
||||||
50
record/RECORD_3.sql
Normal file
50
record/RECORD_3.sql
Normal file
@@ -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;
|
||||||
63
record/RECORD_4.sql
Normal file
63
record/RECORD_4.sql
Normal file
@@ -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;
|
||||||
Reference in New Issue
Block a user