PL / SQL - Variabili

In questo capitolo, discuteremo delle variabili in Pl / SQL. Una variabile non è altro che un nome dato a un'area di memoria che i nostri programmi possono manipolare. Ogni variabile in PL / SQL ha un tipo di dati specifico, che determina la dimensione e il layout della memoria della variabile; l'intervallo di valori che è possibile memorizzare in quella memoria e l'insieme di operazioni che possono essere applicate alla variabile.

Il nome di una variabile PL / SQL è costituito da una lettera eventualmente seguita da più lettere, numeri, segni di dollaro, trattini bassi e segni di numero e non deve superare i 30 caratteri. Per impostazione predefinita, i nomi delle variabili non fanno distinzione tra maiuscole e minuscole. Non è possibile utilizzare una parola chiave PL / SQL riservata come nome di variabile.

Il linguaggio di programmazione PL / SQL consente di definire vari tipi di variabili, come i tipi di dati di data e ora, record, raccolte, ecc. Che tratteremo nei capitoli successivi. Per questo capitolo, studiamo solo i tipi di variabili di base.

Dichiarazione di variabili in PL / SQL

Le variabili PL / SQL devono essere dichiarate nella sezione dichiarazione o in un pacchetto come una variabile globale. Quando si dichiara una variabile, PL / SQL alloca memoria per il valore della variabile e la posizione di archiviazione è identificata dal nome della variabile.

La sintassi per dichiarare una variabile è:

variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]

Dove, nome_variabile è un identificatore valido in PL / SQL, il tipo di dati deve essere un tipo di dati PL / SQL valido o qualsiasi tipo di dati definito dall'utente che abbiamo già discusso nell'ultimo capitolo. Di seguito sono riportate alcune dichiarazioni di variabili valide insieme alla loro definizione:

sales number(10, 2); 
pi CONSTANT double precision := 3.1415; 
name varchar2(25); 
address varchar2(100);

Quando si fornisce una dimensione, una scala o un limite di precisione con il tipo di dati, si parla di constrained declaration. Le dichiarazioni vincolate richiedono meno memoria rispetto alle dichiarazioni non vincolate. Ad esempio:

sales number(10, 2); 
name varchar2(25); 
address varchar2(100);

Inizializzazione delle variabili in PL / SQL

Ogni volta che si dichiara una variabile, PL / SQL le assegna un valore predefinito di NULL. Se vuoi inizializzare una variabile con un valore diverso dal valore NULL, puoi farlo durante la dichiarazione, usando uno dei seguenti -

  • Il DEFAULT parola chiave

  • Il assignment operatore

Ad esempio:

counter binary_integer := 0; 
greetings varchar2(20) DEFAULT 'Have a Good Day';

Puoi anche specificare che una variabile non deve avere un'estensione NULL valore utilizzando il NOT NULLvincolo. Se si utilizza il vincolo NOT NULL, è necessario assegnare esplicitamente un valore iniziale per quella variabile.

È una buona pratica di programmazione inizializzare correttamente le variabili altrimenti, a volte i programmi potrebbero produrre risultati imprevisti. Prova il seguente esempio che utilizza vari tipi di variabili:

DECLARE 
   a integer := 10; 
   b integer := 20; 
   c integer; 
   f real; 
BEGIN 
   c := a + b; 
   dbms_output.put_line('Value of c: ' || c); 
   f := 70.0/3.0; 
   dbms_output.put_line('Value of f: ' || f); 
END; 
/

Quando il codice sopra viene eseguito, produce il seguente risultato:

Value of c: 30 
Value of f: 23.333333333333333333  

PL/SQL procedure successfully completed.

Ambito variabile in PL / SQL

PL / SQL consente l'annidamento di blocchi, ovvero ogni blocco di programma può contenere un altro blocco interno. Se una variabile è dichiarata all'interno di un blocco interno, non è accessibile al blocco esterno. Tuttavia, se una variabile è dichiarata e accessibile a un blocco esterno, è anche accessibile a tutti i blocchi interni annidati. Esistono due tipi di ambito variabile:

  • Local variables - Variabili dichiarate in un blocco interno e non accessibili ai blocchi esterni.

  • Global variables - Variabili dichiarate nel blocco più esterno o in un pacchetto.

L'esempio seguente mostra l'utilizzo di Local e Global variabili nella sua forma semplice -

DECLARE 
   -- Global variables  
   num1 number := 95;  
   num2 number := 85;  
BEGIN  
   dbms_output.put_line('Outer Variable num1: ' || num1); 
   dbms_output.put_line('Outer Variable num2: ' || num2); 
   DECLARE  
      -- Local variables 
      num1 number := 195;  
      num2 number := 185;  
   BEGIN  
      dbms_output.put_line('Inner Variable num1: ' || num1); 
      dbms_output.put_line('Inner Variable num2: ' || num2); 
   END;  
END; 
/

Quando il codice sopra viene eseguito, produce il seguente risultato:

Outer Variable num1: 95 
Outer Variable num2: 85 
Inner Variable num1: 195 
Inner Variable num2: 185  

PL/SQL procedure successfully completed.

Assegnazione dei risultati della query SQL alle variabili PL / SQL

Puoi usare il file SELECT INTOdichiarazione di SQL per assegnare valori alle variabili PL / SQL. Per ogni articolo inSELECT list, deve essere presente una variabile compatibile con il tipo nel file INTO list. L'esempio seguente illustra il concetto. Creiamo una tabella denominata CLIENTI -

(For SQL statements, please refer to the SQL tutorial)

CREATE TABLE CUSTOMERS( 
   ID   INT NOT NULL, 
   NAME VARCHAR (20) NOT NULL, 
   AGE INT NOT NULL, 
   ADDRESS CHAR (25), 
   SALARY   DECIMAL (18, 2),        
   PRIMARY KEY (ID) 
);  

Table Created

Inseriamo ora alcuni valori nella tabella -

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
  
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 
 
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

Il seguente programma assegna i valori dalla tabella sopra alle variabili PL / SQL utilizzando il SELECT INTO clause di SQL -

DECLARE 
   c_id customers.id%type := 1; 
   c_name  customers.name%type; 
   c_addr customers.address%type; 
   c_sal  customers.salary%type; 
BEGIN 
   SELECT name, address, salary INTO c_name, c_addr, c_sal 
   FROM customers 
   WHERE id = c_id;  
   dbms_output.put_line 
   ('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal); 
END; 
/

Quando il codice sopra viene eseguito, produce il seguente risultato:

Customer Ramesh from Ahmedabad earns 2000  

PL/SQL procedure completed successfully