PL / SQL – variables

En este capítulo, discutiremos las variables en Pl / SQL. Una variable no es más que un nombre asignado a un área de almacenamiento que nuestros programas pueden administrar. Cada variable PL / SQL tiene un tipo de datos específico que determina el tamaño y la estructura de memoria de la variable; el rango de valores que se pueden almacenar en esta memoria y el conjunto de operaciones que se pueden aplicar a la variable.

Un nombre de variable PL / SQL consta de una letra, que puede ir seguida de varias letras, números, signos de dólar, guiones bajos y caracteres numéricos, y no puede superar los 30 caracteres. De forma predeterminada, los nombres de las variables no distinguen entre mayúsculas y minúsculas. No puede utilizar la palabra clave reservada PL / SQL como nombre de variable.

El lenguaje de programación PL / SQL le permite definir varios tipos de variables, como tipos de datos de fecha y hora, registros, colecciones, etc., que veremos en los siguientes capítulos. En este capítulo, examinemos solo los tipos básicos de variables.

Declaración de variable en PL / SQL

Las variables PL / SQL deben declararse en la sección de declaración o en el paquete como una variable global. Cuando declara una variable, PL / SQL asigna memoria para el valor de la variable y la ubicación de almacenamiento se identifica por el nombre de la variable.

La sintaxis para declarar una variable es:

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

Dónde, nombre de la variable – un identificador válido en PL / SQL, tipo de datos debe ser un tipo de datos PL / SQL válido o cualquier tipo de datos definido por el usuario que discutimos en el capítulo anterior. Algunas declaraciones de variables válidas junto con su definición se muestran a continuación:

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

Cuando especifica un límite de tamaño, escala o precisión con un tipo de datos, se llama anuncio limitado… Las declaraciones restringidas requieren menos memoria que las declaraciones no restringidas. Por ejemplo –

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

Inicialización de variables en PL / SQL

Cada vez que declara una variable, PL / SQL le asigna un valor predeterminado de NULL. Si desea inicializar una variable con un valor que no sea NULL, puede hacerlo durante la declaración utilizando cualquiera de los siguientes:

  • EN DEFECTO palabra clave

  • EN cita operador

Por ejemplo –

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

También puede especificar que la variable no debe tener CERO valor usando NO CERO limitación. Si está utilizando la restricción NOT NULL, debe asignar explícitamente un valor inicial a esta variable.

Es una buena práctica de programación inicializar las variables correctamente, de lo contrario, los programas pueden producir resultados inesperados. Pruebe el siguiente ejemplo que usa diferentes tipos de variables:

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

Cuando se ejecuta el código anterior, da el siguiente resultado:

Value of c: 30 
Value of f: 23.333333333333333333  

PL/SQL procedure successfully completed. 

Alcance variable en PL / SQL

PL / SQL permite el anidamiento de bloques, es decir, cada bloque de programa puede contener un bloque interno diferente. Si una variable se declara en un bloque interno, no está disponible para el bloque externo. Sin embargo, si se declara una variable y está disponible para un bloque exterior, también estará disponible para todos los bloques interiores anidados. Hay dos tipos de alcance variable:

  • Variables locales – Las variables se declaran en el bloque interno y no están disponibles para los bloques externos.

  • Variables globales – Variables declaradas en un bloque o paquete externo.

El siguiente ejemplo demuestra el uso de Local y Global variables en forma simple –

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

Cuando se ejecuta el código anterior, da el siguiente resultado:

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

PL/SQL procedure successfully completed. 

Asignar resultados de SQL a variables PL / SQL

puedes usar SELECCIONAR EN Sentencia SQL para asignar valores a variables PL / SQL. Para cada artículo en SELECCIONAR lista, debe haber una variable de tipo compatible correspondiente en EN lista… El siguiente ejemplo ilustra este concepto. Creemos una tabla llamada CLIENTES –

(Para obtener instrucciones de SQL, consulte la Tutorial de SQL.)

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  

Insertemos ahora algunos valores en la tabla:

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

El siguiente programa asigna valores de la tabla anterior a variables PL / SQL usando SELECT INTO cláusula 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; 
/  

Cuando se ejecuta el código anterior, da el siguiente resultado:

Customer Ramesh from Ahmedabad earns 2000  

PL/SQL procedure completed successfully

🚫