CodeGym /Corsi /SQL SELF /Tipi di dati e il loro utilizzo in PL/pgSQL: INTEGER, TEX...

Tipi di dati e il loro utilizzo in PL/pgSQL: INTEGER, TEXT, BOOLEAN, RECORD

SQL SELF
Livello 49 , Lezione 4
Disponibile

In questa lezione vediamo quali tipi di dati sono supportati in PL/pgSQL e impariamo a lavorarci in modo efficace. Ci concentriamo su quattro tipi di dati:

  • INTEGER per lavorare con i numeri.
  • TEXT per gestire le stringhe.
  • BOOLEAN per lavorare con valori logici.
  • RECORD per gestire strutture dati dinamiche.

Vedremo ogni tipo di dato con degli esempi, così puoi capire come usarli nella pratica.

Tipi di dati supportati in PL/pgSQL

PL/pgSQL supporta tutti i tipi di dati che già conosci da PostgreSQL. Dai semplici numerici (INTEGER, NUMERIC) a quelli più avanzati come array e JSONB. Facciamo una panoramica dei principali.

  1. Tipi primitivi:

    • INTEGER, BIGINT, FLOAT, NUMERIC — tipi numerici.
    • TEXT, CHAR, VARCHAR — tipi testuali.
    • BOOLEAN — tipo di dato logico.
  2. Tipi complessi:

    • RECORD — per lavorare con set di dati dinamici.
    • ROWTYPE — per lavorare con tipi di riga di una tabella.
    • Array e JSON — li vedremo più avanti nel corso.

Lavorare con il tipo INTEGER

INTEGER è uno dei tipi di dati più usati. Serve per salvare numeri interi. In PL/pgSQL puoi usarlo per fare calcoli, lavorare con gli ID dei record e controllare condizioni.

Esempio: conteggio del numero di record

Supponiamo di avere una tabella students e vogliamo sapere quanti studenti ci sono nel database.

DO $$
DECLARE
    total_students INTEGER; -- Variabile per salvare il numero di studenti
BEGIN
    SELECT COUNT(*) INTO total_students FROM students; -- Salviamo il risultato della query nella variabile
    RAISE NOTICE 'Numero di studenti: %', total_students; -- Mostriamo il messaggio
END;
$$;

Cose importanti quando lavori con INTEGER:

  • In PL/pgSQL assegni un valore a una variabile usando la parola chiave INTO.
  • Se provi a salvare un valore decimale in INTEGER, otterrai un errore. In questi casi usa NUMERIC o FLOAT.

Lavorare con il tipo TEXT

TEXT serve per salvare dati testuali. Ti sarà utile quando devi lavorare con nomi, descrizioni o qualsiasi altro testo.

Esempio: mostrare i nomi degli studenti

In questo esempio mostriamo i nomi di tutti gli studenti dalla tabella students.

DO $$
DECLARE
    student_name TEXT; -- Variabile per il nome dello studente
BEGIN
    FOR student_name IN SELECT name FROM students LOOP
        RAISE NOTICE 'Nome dello studente: %', student_name; -- Mostriamo ogni nome
    END LOOP;
END;
$$;

Funzioni utili per lavorare con TEXT:

  • UPPER() e LOWER() — per cambiare il testo in maiuscolo/minuscolo.
  • CONCAT() — per unire le stringhe.
  • LENGTH() — per sapere la lunghezza della stringa.

Per esempio:

DO $$
DECLARE
    full_name TEXT;
BEGIN
    full_name := CONCAT('Alekse', ' Min'); -- Uniamo le stringhe
    RAISE NOTICE 'Nome completo: %', UPPER(full_name); -- Stampiamo il nome in maiuscolo
END;
$$;

Lavorare con il tipo BOOLEAN

BOOLEAN serve per salvare valori logici: TRUE, FALSE e NULL. Questo tipo di dato è super utile quando devi controllare condizioni o filtrare dati.

Esempio: controllo dell’attività dello studente

Supponiamo che tu abbia una tabella students con una colonna is_active che indica se lo studente è attivo.

DO $$
DECLARE
    is_active BOOLEAN; -- Variabile per salvare lo stato di attività
BEGIN
    SELECT is_active INTO is_active FROM students WHERE id = 1; -- Prendiamo il valore dalla tabella
    IF is_active THEN
        RAISE NOTICE 'Lo studente è attivo!';
    ELSE
        RAISE NOTICE 'Lo studente NON è attivo.';
    END IF;
END;
$$;

Cose importanti quando lavori con BOOLEAN:

  • I valori logici puoi usarli direttamente nelle condizioni IF e WHILE.
  • Il valore NULL nella logica è "indefinito", quindi tienilo a mente quando fai i controlli.

Lavorare con il tipo RECORD

RECORD è un tipo di dato super potente che serve per salvare righe di dati senza una struttura predefinita. È molto utile quando lavori con i risultati delle query SQL che restituiscono più colonne.

Esempio: scorrere tutte le righe della tabella

Nell’esempio qui sotto scorriamo tutte le righe della tabella students e mostriamo il nome e l’ID di ogni studente.

DO $$
DECLARE
    student RECORD; -- Tipo dinamico per salvare una riga di dati
BEGIN
    FOR student IN SELECT id, name FROM students LOOP
        RAISE NOTICE 'ID: %, Nome: %', student.id, student.name; -- Accediamo alle colonne della riga
    END LOOP;
END;
$$;

Cose importanti quando lavori con RECORD:

  • Le variabili di tipo RECORD si riempiono solo dentro un ciclo o usando una query SELECT INTO.
  • Per accedere alle colonne usa record.nome_colonna.

Tipi di dati ROWTYPE per lavorare con le tabelle

Se vuoi salvare una riga intera di una tabella (e vuoi una tipizzazione precisa), puoi usare il tipo ROWTYPE. Prende automaticamente la struttura della riga dalla tabella.

Esempio: lavorare con il tipo ROWTYPE

DO $$
DECLARE
    student students%ROWTYPE; -- Variabile con la struttura della riga della tabella students
BEGIN
    SELECT * INTO student FROM students WHERE id = 1; -- Carichiamo i dati della riga nella variabile
    RAISE NOTICE 'Nome dello studente: %, Corso: %', student.name, student.course;
END;
$$;

Differenze tra RECORD e ROWTYPE

Caratteristica RECORD ROWTYPE
Struttura delle colonne Non definita in anticipo Dipende dalla tabella o dalla query
Utilizzo Flessibilità per qualsiasi risultato Legato rigidamente alla struttura

Esempio pratico

Scriviamo una funzione che restituisce il numero di studenti attivi e i loro nomi.

CREATE FUNCTION active_students_report() RETURNS TABLE(id INT, name TEXT) AS $$
BEGIN
    RETURN QUERY
    SELECT id, name FROM students WHERE is_active = TRUE;
END;
$$ LANGUAGE plpgsql;

Chiamata della funzione:

SELECT * FROM active_students_report();

Errori quando lavori con i tipi di dati

A volte lavorare con i dati porta a errori. Ecco alcune situazioni comuni:

  • Errore di tipo: provi a salvare una stringa in una variabile INTEGER (tipo my_var := 'abc';).
  • Usi NULL dove ti aspetti TRUE o FALSE.
  • Usi RECORD senza inizializzarlo correttamente.

Come evitare errori:

  • Dichiara sempre esplicitamente il tipo delle variabili.
  • Controlla i tipi di dati delle colonne nelle tabelle prima di scrivere.
  • Usa i comandi di debug come RAISE NOTICE.

Ora sai come lavorare con i tipi di dati INTEGER, TEXT, BOOLEAN e RECORD in PL/pgSQL. Questa conoscenza ti permetterà di creare programmi più complessi e potenti nel linguaggio di programmazione procedurale di PostgreSQL.

1
Sondaggio/quiz
Introduzione a PL/pgSQL, livello 49, lezione 4
Non disponibile
Introduzione a PL/pgSQL
Introduzione a PL/pgSQL
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION