Database
 sql >> Database >  >> RDS >> Database

Tutorial PL/SQL:tutto ciò che devi sapere su PL/SQL

PL/SQL è un linguaggio procedurale che supera le carenze incontrate da Structured Query Language. È un'estensione di SQL e possiamo persino utilizzare query SQL senza problemi in qualsiasi applicazione o programma PL/SQL. In questo tutorial PL/SQL, analizzeremo in dettaglio i concetti di base di PL/SQL. I seguenti argomenti sono trattati in questo articolo.

  • Cos'è PL/SQL?
    • Caratteristiche
    • PL/SQL vs SQL
  • Strutture a blocchi in PL/SQL
  • Variabili PL/SQL
  • Funzione in PL/SQL
  • Procedura PL/SQL
  • Blocco nidificato
  • Dichiarazione IF
  • Dichiarazione CASE
  • Dichiarazione di ciclo
    • Dichiarazione Mentre Loop
    • Dichiarazione For Loop
  • Trattamento eccezionale

Cos'è PL/SQL?

Sta per estensione del linguaggio procedurale al linguaggio di query strutturato. Oracle ha creato PL/SQL che estende alcune limitazioni di SQL per fornire una soluzione più completa per la creazione di applicazioni mission-critical in esecuzione sul database Oracle.

Caratteristiche

  • PL/SQL fornisce la funzionalità di un linguaggio procedurale come il processo decisionale, l'iterazione, ecc.

  • Utilizzando un singolo comando, PL/SQL può eseguire una serie di query.

  • Possiamo anche riutilizzare unità PL/SQL come funzioni, trigger, procedure, ecc. che vengono archiviate nel database dopo la creazione.

  • PL/SQL ha anche un blocco di gestione delle eccezioni che gestisce le eccezioni in PL/SQL.

  • È anche possibile eseguire un ampio controllo degli errori utilizzando PL/SQL

  • Le applicazioni scritte in PL/SQL sono portabili su altri hardware e sistemi operativi a condizione che Oracle debba essere operativo.

PL/SQL vs SQL

SQL PL/SQL
SQL è una singola query utilizzata per eseguire operazioni DDL e DML PL/SQL è un blocco di codici utilizzato per definire un intero programma o procedura/funzione, ecc
Non definisce realmente come devono essere fatte le cose, ma piuttosto cosa deve essere fatto PL/SQL definisce come devono essere fatte le cose
Esegue una singola istruzione Esegue un blocco di istruzioni contemporaneamente.
SQL viene utilizzato principalmente per manipolare i dati PL/SQL, invece, viene utilizzato per creare applicazioni
Non può contenere codice PL/SQL Dato che è un'estensione SQL, può contenere codice SQL al suo interno

Strutture a blocchi in PL/SQL

PL/SQL in genere organizza il codice in blocchi. Il blocco di codice senza nome è noto come blocco anonimo. È noto come blocco anonimo perché non viene salvato nel database di Oracle. Diamo un'occhiata a un blocco anonimo in PL/SQL.

[DECLARE]
   declaration statements;
[BEGIN]
   execution statements;
   [EXCEPTION]
      exception statements;
END;
/

Guardando il diagramma mostrato sopra, possiamo vedere che la struttura del blocco è divisa in quattro parti, ovvero dichiarazione, inizio, eccezione e fine. Proviamo a capire come funziona la struttura a blocchi in PL/SQL. Di tutte queste sezioni, la sezione di esecuzione è obbligatoria e tutte le altre sono facoltative.

  • DICHIARA la parola chiave viene utilizzata per la sezione di dichiarazione viene utilizzata per dichiarare i tipi di dati e le strutture come variabili, funzioni, ecc.

  • INIZIO la parola chiave viene utilizzata per la sezione di esecuzione. È obbligatorio e contiene tutte le istruzioni che devono essere eseguite. Questo blocco è il punto in cui viene definita la logica aziendale, in questo blocco possiamo utilizzare sia istruzioni procedurali che SQL.

  • L'ECCEZIONE la parola chiave viene utilizzata per la sezione delle eccezioni. Contiene tutte le istruzioni di eccezione.

  • END la parola chiave contrassegna la fine del blocco e la barra rovesciata '/' indica allo strumento che stai utilizzando (Strumento Oracle Database) per eseguire il blocco PL/SQL.

Ecco un semplice esempio per mostrare come possiamo usare il codice PL/SQL.

BEGIN
       NULL;
END;
/

Ora che sappiamo come funziona la struttura a blocchi in PL/SQL, comprendiamo i vari aspetti di PL/SQL come la dichiarazione, la denominazione e l'assegnazione di valori alle variabili.

Variabili PL/SQL

La variabile in PL/SQL è fondamentalmente un nome che varia o una posizione di archiviazione temporanea che supporta un particolare tipo di dati. Diamo un'occhiata a come possiamo usare le variabili in un programma PL/SQL.

Regole di denominazione delle variabili

PL/SQL segue le seguenti regole per la denominazione delle variabili.

  • La variabile non può contenere più di 31 caratteri

  • Il nome della variabile dovrebbe iniziare con un carattere ASCII. Poiché PL/SQL distingue tra maiuscole e minuscole, una lettera maiuscola e una lettera minuscola saranno variabili diverse.

  • Dopo il primo carattere, deve esserci un carattere speciale ($,_ ) o un numero qualsiasi.

Convenzioni di denominazione

Utilizzare le seguenti convenzioni di denominazione elencate di seguito per utilizzare le variabili.

Prefisso Tipo di dati
v_ VARCHAR2
n_ NUMERO
t_ TABELLA
r_ RIGA
d_ DATA
b_ BOOLEANO

Dichiarazione

Proviamo a capire come si fa la dichiarazione delle variabili in PL/SQL

La dichiarazione include il nome della variabile seguito dal tipo di dati e separato da un punto e virgola. Di seguito è riportato un esempio per mostrare come dichiarare una variabile in PL/SQL.

DECLARE
   v_name VARCHAR(25);
   n_age NUMBER(3);
BEGIN
  NULL;
END;

Puoi anche aggiungere la lunghezza del tipo di dati come abbiamo fatto nell'esempio sopra.

Ancora

L'ancora si riferisce sostanzialmente all'uso della parola chiave %TYPE che per dichiarare una variabile con il tipo di dati associato al tipo di dati di una colonna di una particolare colonna in una tabella.

Dai un'occhiata a un esempio per capirlo. Supponiamo di avere una tabella EMPLOYEES, possiamo usare le ancore nel modo seguente.

DECLARE
    v_name EMPLOYEE.NAME%TYPE;
    n_age    EMPLOYEE.AGE%TYPE;
BEGIN
   NULL;
END;
/

Assegnazione

L'assegnazione di una variabile è abbastanza semplice, possiamo usare l'operatore di assegnazione per assegnare valori a una variabile. L'esempio seguente mostra come possiamo assegnare valori a una variabile.

DECLARE
   v_name VARCHAR(20);
   n_course VARCHAR(10);
BEGIN
  v_name = "edureka";
  v_course = "sql";
END;
/

Inizializzazione

Possiamo anche inizializzare un valore per la variabile nella sezione di dichiarazione. L'esempio seguente mostra come inizializzare i valori in una variabile.

DECLARE
v_name VARCHAR(20) = "edureka";
n_course VARCHAR(10) = "sql";
BEGIN
 NULL;
END;
/

Ora che sappiamo come possiamo lavorare con le variabili, cerchiamo di capire come utilizzeremo le funzioni in PL/SQL.

Funzione in PL/SQL

Una funzione in PL/SQL è fondamentalmente un blocco denominato che restituisce un valore. È anche conosciuto come una subroutine o un sottoprogramma, la seguente sintassi mostra come possiamo usare le funzioni in PL/SQL.

CREATE [OR REPLACE] FUNCTION function_name [(
   parameter_1 [IN] [OUT] data_type,
   parameter_2 [IN] [OUT] data_type,
   parameter_N [IN] [OUT] data_type]
    RETURN return_data_type IS
 
BEGIN
   statements
   return return_data_type;
   EXCEPTION
     
END;
/

Prima di tutto, devi specificare un nome di funzione dopo la parola chiave. Il nome della funzione deve iniziare con un verbo. Una funzione può non avere nessuno, uno o più parametri che specifichiamo nei parametri. Dobbiamo specificare il tipo di dati di ogni parametro in modo esplicito, quindi arriva la modalità che può essere una delle seguenti.

  • IN – Il parametro IN è un parametro di sola lettura.

  • OUT – È un parametro di sola scrittura

  • IN OUT – Il parametro IN OUT è sia di lettura che di scrittura.

Ecco un semplice esempio per mostrare come utilizziamo le funzioni in PL/SQL.

CREATE OR REPLACE FUNCTION try_parse(
    iv_number IN VARCHAR2)
  RETURN NUMBER IS
BEGIN
   RETURN to_number(iv_number);
   EXCEPTION
     WHEN others THEN
        RETURN NULL;
END;

Chiamare una funzione

Proviamo a chiamare la funzione che abbiamo creato in un blocco anonimo nell'esempio seguente.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_x number;
  n_y number;
   n_z number;
BEGIN
   n_x := try_parse('256');
   n_y := try_parse('29.72');
   n_z := try_parse('pqrs');
 
   DBMS_OUTPUT.PUT_LINE(n_x);
   DBMS_OUTPUT.PUT_LINE(n_y);
   DBMS_OUTPUT.PUT_LINE(n_z);
END;
/

Possiamo chiamare la funzione anche in un'istruzione SELECT. Ora che sappiamo come utilizzare le funzioni in PL/SQL, cerchiamo di capire come lavoriamo con le procedure in PL/SQL.

Procedura PL/SQL

Una procedura è fondamentalmente un blocco che esegue un compito specifico. Utilizzando una procedura possiamo avvolgere o incapsulare complesse logiche di business e riutilizzarle sia a livello di applicazione che di database.

Diamo un'occhiata a un semplice esempio per capire come funziona la procedura in PL/SQL

CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
   -- update employee's salary
   UPDATE employees
   SET salary = salary + salary * in_percent / 100
   WHERE employee_id = in_employee_id;
END;

Nell'esempio sopra, abbiamo due parametri, la procedura regola lo stipendio di una determinata percentuale e la parola chiave UPDATE aggiorna il valore nelle informazioni sullo stipendio.

Intestazione della procedura

La sezione prima della parola chiave IS è chiamata intestazione della procedura. Di seguito sono riportati alcuni suggerimenti con cui è necessario avere familiarità mentre si lavora con le procedure.

  • schema – È il nome facoltativo dello schema a cui appartiene la procedura.

  • nome – Il nome della procedura che dovrebbe iniziare con un verbo.

  • parametri – È l'elenco opzionale dei parametri.

  • AUTHID – Determina se la procedura verrà eseguita con il privilegio dell'utente corrente o del proprietario originale della procedura.

Organo di procedura

Tutto ciò che segue la parola chiave IS è chiamato corpo della procedura. Abbiamo le dichiarazioni di dichiarazione, eccezione ed esecuzione nel corpo della procedura. A differenza della funzione, la parola chiave RETURN in una procedura viene utilizzata per interrompere l'esecuzione e restituire il controllo al chiamante.

Richiamo di una procedura

Vediamo come chiamare una procedura in PL/SQL.

	
EXEC procedure_name(param1,param2…paramN);

Possiamo chiamare le procedure senza parametri semplicemente usando la parola chiave EXEC e il nome della procedura. Ora che sappiamo come possiamo lavorare con le procedure, cerchiamo di capire come vengono utilizzati i blocchi annidati in PL/SQL.

Blocco nidificato

Un blocco nidificato non è altro che una combinazione di uno o più blocchi PL/SQL per ottenere un migliore controllo sull'esecuzione e una gestione eccezionale del programma.

Ecco un semplice esempio di blocco annidato.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1;
BEGIN
  DECLARE
    n_emp_id employees.employee_id%TYPE := &emp_id2;
    v_name   employees.first_name%TYPE;
  BEGIN
    SELECT first_name
    INTO v_name
    FROM employees
    WHERE employee_id = n_emp_id;
 
    DBMS_OUTPUT.PUT_LINE('First name of employee ' || n_emp_id || 
                                       ' is ' || v_name);
    EXCEPTION
      WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found');
  END;
END;
/

Il blocco PL/SQL esterno nell'esempio precedente è noto come blocco padre o blocco che racchiude, il blocco interno, d'altra parte, è noto come blocco figlio o blocco blocco chiuso.

Non è una buona idea usare le variabili con lo stesso nome in entrambi i blocchi perché durante l'esecuzione la variabile di blocco figlio sovrascriverà la variabile di blocco padre. Succede perché PL/SQL dà la priorità alla variabile all'interno del proprio blocco.

Blocca etichetta

Possiamo superare questo problema con l'etichetta del blocco che ci aiuta a fare riferimenti alle variabili all'interno dei blocchi usando un'etichetta.

Ecco un semplice esempio per mostrare come possiamo utilizzare un'etichetta di blocco.

<<block_label>>
DECLARE
...
BEGIN
...
END;

L'uso di un'etichetta di blocco aiuta a migliorare la leggibilità del codice, ottenere un controllo migliore e fare riferimenti ai blocchi. Ora che sappiamo come lavorare con i blocchi nidificati, cerchiamo di capire come funziona IF STATEMENT in PL/SQL.

Dichiarazione IF

PL/SQL ha tre DICHIARAZIONI IF

  • IF-THEN – È la dichiarazione IF più semplice se la condizione è vera le istruzioni verranno eseguite, se la condizione è falsa non fa nulla.

  • IF-THEN-ELSE – In questo, viene aggiunta la clausola ELSE per una sequenza alternativa di istruzioni.

  • IF-THEN-ELSEIF – Ci consente di eseguire più condizioni di test in sequenza.

Sintassi IF-THEN

IF condition THEN
   sequence_of_statements;
END IF;

Sintassi IF-THEN-ELSE

IF condition THEN
   sequence_of_if_statements;
ELSE
   sequence_of_else_statements;
END IF;

Sintassi SE-THEN-ELSEIF

IF condition1  THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

Ora che abbiamo finito con l'IF STATEMENT, esaminiamo l'istruzione CASE in PL/SQL.

Dichiarazione CASO

L'istruzione CASE aiuta fondamentalmente nell'esecuzione di una sequenza di istruzioni basate su un selettore. Un selettore, in questo caso, può essere qualsiasi cosa, può essere una variabile, una funzione o una semplice espressione. Ecco un semplice esempio per mostrare la sintassi dell'istruzione CASE in PL/SQL.

[<<label_name>>]
CASE [TRUE | selector]
   WHEN expression1 THEN
 sequence_of_statements1;
   WHEN expression2 THEN
 sequence_of_statements2;
   ...
   WHEN expressionN THEN
 sequence_of_statementsN;
  [ELSE sequence_of_statementsN+1;]
END CASE [label_name];

Nella sintassi sopra, dopo la parola chiave CASE viene il selettore. PL/SQL valuterà il selettore solo una volta per determinare quale istruzione deve essere eseguita.

Seguita dal selettore è la parola chiave WHEN. Se l'espressione soddisfa il selettore, viene eseguita l'istruzione corrispondente dopo la parola chiave THEN.

Ora che sappiamo come utilizzare un'istruzione CASE, proviamo a capire come utilizzeremo le istruzioni di ciclo in PL/SQL.

Dichiarazione del ciclo

Un'istruzione di ciclo in PL/SQL è un'istruzione iterativa che consente di eseguire una sequenza di istruzioni più volte. Ecco un semplice esempio per mostrare la sintassi di un'istruzione di ciclo in PL/SQL.

LOOP
   sequence_of_statements;
END LOOP;

Deve esserci almeno un'istruzione eseguibile tra le parole chiave LOOP e END LOOP.

Ciclo con dichiarazione EXIT

Le istruzioni EXIT ed EXIT when ti consentono di uscire dal ciclo. L'istruzione EXIT WHEN termina il ciclo in modo condizionale mentre EXIT termina l'esecuzione in modo incondizionato.

LOOP
   ...
   EXIT WHEN condition;
END LOOP;

Etichetta del ciclo

Un'etichetta di ciclo viene utilizzata per qualificare il nome della variabile del contatore di ciclo quando viene utilizzata in un ciclo nidificato. Di seguito è riportata la sintassi di un'etichetta di ciclo.

<<label>>
LOOP
   sequence_of_statements;
END LOOP label;

Ora che sappiamo come utilizzare le istruzioni di ciclo, diamo un'occhiata alle istruzioni di ciclo while per una migliore comprensione.

Dichiarazione durante il ciclo

Possiamo usare l'istruzione del ciclo WHILE quando il numero di esecuzioni non è definito fino all'inizio dell'esecuzione. La seguente sintassi viene utilizzata per un'istruzione di ciclo WHILE in PL/SQL.

WHILE condition
LOOP
   sequence_of_statements;
END LOOP;

La condizione nella sintassi è un valore booleano o un'espressione che restituisce TRUE, FALSE o NULL. Se la condizione è TRUE, le istruzioni verranno eseguite, se è FALSE, l'esecuzione si interrompe e il controllo passa alla successiva istruzione eseguibile.

Ora che sappiamo come utilizzare un'istruzione di ciclo WHILE, diamo un'occhiata all'istruzione di ciclo FOR.

Dichiarazione For Loop

Un'istruzione di ciclo FOR in PL/SQL ci consente di eseguire una sequenza di istruzioni per un numero definito di volte. Di seguito è riportata la sintassi per utilizzare l'istruzione di ciclo FOR in PL/SQL

FOR loop_counter IN [REVERSE] lower_bound .. higher_bound
LOOP
   sequence_of_statements;
END LOOP;

PL/SQL crea automaticamente una variabile locale loop_counter con un tipo di dati INTEGER per il ciclo in modo da non doverlo dichiarare esplicitamente. Il limite inferiore... il limite superiore è l'intervallo su cui il ciclo viene ripetuto. Inoltre, devi avere almeno un'istruzione eseguibile tra le parole chiave LOOP e END LOOP.

Ora che sappiamo come utilizzare le istruzioni di ciclo in PL/SQL, diamo un'occhiata alla gestione eccezionale in PL/SQL.

Trattamento eccezionale

In PL/SQL qualsiasi tipo di errore è considerato un'eccezione. Un'eccezione può essere trattata come una condizione speciale che può modificare o alterare il flusso di esecuzione. In PL/SQL esistono due tipi di eccezioni.

  • Eccezione di sistema – Viene generato dal runtime PL/SQL quando rileva un errore.

  • Eccezione definita dal programmatore – Queste eccezioni sono definite dal programmatore in un'applicazione specifica.

Definizione di un'eccezione

Un'eccezione in PL/SQL deve essere dichiarata prima che possa essere sollevata. Possiamo definire l'eccezione usando la parola chiave EXCEPTION come abbiamo fatto nell'esempio seguente.

EXCEPTION_NAME EXCEPTION;

Per sollevare un'eccezione, utilizziamo la parola chiave RAISE.

RAISE EXCEPTION_NAME;

Quindi si trattava solo di PL/SQL, spero che questo articolo ti abbia aiutato ad aggiungere valore alle tue conoscenze. Per ulteriori informazioni su SQL o database, puoi fare riferimento al nostro elenco di letture completo qui:Databases Edureka .

Se desideri ricevere una formazione strutturata su MySQL, dai un'occhiata al nostro Formazione per la certificazione DBA MySQL che viene fornito con una formazione dal vivo con istruttore e un'esperienza di progetto nella vita reale. Questa formazione ti aiuterà a comprendere in modo approfondito MySQL e a raggiungere la padronanza dell'argomento.

Hai una domanda per noi? Si prega di menzionarlo nella sezione commenti di ”Tutorial PL/SQL ” e ti ricontatterò.