PL/SQL - Sintassi di Base

Benvenuti, futuri programmatori! Oggi ci immergeremo nel mondo entusiasmante di PL/SQL. Non preoccupatevi se non avete mai scritto una riga di codice prima - inizieremo da zero e costruiremo le vostre conoscenze passo dopo passo. Alla fine di questo tutorial, sarete in grado di scrivere i vostri primi programmi PL/SQL con fiducia!

PL/SQL - Basic Syntax

L'Esempio di "Ciao Mondo"

Iniziamo con il tradizionale programma "Ciao Mondo". È un rito di passaggio per ogni programmatore, ed è un ottimo modo per familiarizzare con la sintassi PL/SQL.

BEGIN
DBMS_OUTPUT.PUT_LINE('Ciao, Mondo!');
END;
/

Analizziamo questo codice:

  1. BEGIN: Questa parola chiave indica l'inizio del nostro blocco PL/SQL.
  2. DBMS_OUTPUT.PUT_LINE('Ciao, Mondo!');: Questa linea stampa il nostro messaggio. Pensa a esso come il modo di PL/SQL per parlare con noi.
  3. END;: Questo indica la fine del nostro blocco PL/SQL.
  4. /: Questa barra obliqua dice a SQL*Plus di eseguire il blocco PL/SQL.

Quando eseguite questo codice, vedrete "Ciao, Mondo!" stampato sullo schermo. Congratulazioni! Avete appena scritto il vostro primo programma PL/SQL.

Gli Identificatori PL/SQL

Gli identificatori sono i nomi che diamo ai vari elementi del programma come variabili, procedure e funzioni. Sono come le targhette per le diverse parti del nostro codice. Ecco le regole per creare identificatori:

  1. Devono iniziare con una lettera (A-Z o a-z)
  2. Possono essere seguiti da lettere, numeri (0-9), segni di dollaro ($), underscore (_) o segni di cancelletto (#)
  3. Non possono essere più lunghi di 30 caratteri
  4. Non possono essere parole riservate (come BEGIN, END, IF, ecc.)

Ecco alcuni esempi:

DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- Codice qui
END;
/

In questo esempio, employee_name, salary e dept_id sono tutti identificatori validi.

I Delimitatori PL/SQL

I delimitatori sono caratteri speciali o simboli che hanno un significato specifico in PL/SQL. Sono come i segni di punteggiatura in una frase, aiutando a strutturare e separare le diverse parti del nostro codice.

Ecco una tabella dei delimitatori comuni PL/SQL:

Delimitatore Descrizione
; Terminatore di istruzione
% Indicatore di attributo
. Selettore di componente
( ) Includono un elenco di parametri
, Separatore di parametri
:= Operatore di assegnazione
=> Operatore di associazione
-- Indicatore di commento a riga singola
/ / Indicatori di commento a riga multipla

Vediamo alcuni di questi in azione:

DECLARE
v_count NUMBER := 0; -- Operatore di assegnazione
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- Terminatore di istruzione
DBMS_OUTPUT.PUT_LINE('Name: ' || v_name); -- Selettore di componente
END;
/

I Commenti PL/SQL

I commenti sono come note adesive nel codice. Vengono ignorati dal compilatore ma possono essere estremamente utili per spiegare cosa fa il nostro codice. Ci sono due tipi di commenti in PL/SQL:

  1. Commenti a riga singola: Iniziano con --
  2. Commenti a riga multipla: Inseriti tra /* e */

Ecco un esempio:

DECLARE
-- Questo è un commento a riga singola
v_pi NUMBER := 3.14159;
BEGIN
/*
Questo è un commento a riga multipla.
Può coprire più righe.
Molto utile per spiegazioni più lunghe.
*/
DBMS_OUTPUT.PUT_LINE('Il valore di pi è: ' || v_pi);
END;
/

Unità di Programma PL/SQL

Le unità di programma PL/SQL sono i mattoni delle applicazioni PL/SQL. Sono come le ricette in un libro di cucina - ognuna descrive come eseguire un compito specifico. I principali tipi sono:

  1. Blocchi Anonimi
  2. Procedure
  3. Funzioni
  4. Pacchetti

Vediamo esempi di ciascuno:

1. Blocco Anonimo

Abbiamo già visto questo nel nostro esempio "Ciao Mondo". È un blocco di codice che non viene salvato nel database.

BEGIN
DBMS_OUTPUT.PUT_LINE('Questo è un blocco anonimo');
END;
/

2. Procedura

Una procedura è un blocco PL/SQL con un nome che esegue un'azione specifica.

CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Ciao, ' || p_name || '!');
END;
/

-- Per chiamare la procedura:
BEGIN
greet_user('Alice');
END;
/

3. Funzione

Una funzione è simile a una procedura, ma restituisce un valore.

CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/

-- Per utilizzare la funzione:
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('L'area è: ' || v_area);
END;
/

4. Pacchetto

Un pacchetto è una raccolta di procedure, funzioni, variabili e altri oggetti PL/SQL correlati.

CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/

CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;

FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/

-- Per utilizzare il pacchetto:
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);

v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/

Ecco fatto! Abbiamo coperto la sintassi di base di PL/SQL, da programmi semplici come "Ciao Mondo" a strutture più complesse come i pacchetti. Ricorda, imparare a programmare è come imparare una nuova lingua - richiede pratica e pazienza. Non abbiate paura di sperimentare con gli esempi di codice, modificarli e vedere cosa succede. È così che interiorizzerete veramente questi concetti e diventerete programmatori PL/SQL esperti.

Buon codice, e possa ogni vostra query restituire i risultati attesi!

Credits: Image by storyset