Esempi sulle collezioni e i record

This commit is contained in:
Fabio Scotto di Santolo
2019-09-25 21:13:58 +02:00
parent 330aa77609
commit 585372ff49
7 changed files with 405 additions and 0 deletions

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

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

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