Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PL/SQL es un lenguaje estructurado con bloques. Un bloque PL/SQL es definido por las
palabras clave DECLARE, BEGIN, EXCEPTION, y END, que dividen el bloque en tres
secciones
Las funciones y procedimientos tipos de bloques con un nombre son discutidos con
mayor detalle ms adelante en este artculo, as como los paquetes. En pocas palabras, sin
embargo, un paquete es un contenedor de mltiples funciones y procedimientos. Oracle
extiende PL/SQL con muchos paquetes incorporados en el lenguaje.
El siguiente bloque declara una variable de tipo VARCHAR2 (un string) con un largo
mximo de 100 bytes para contener el string Hola Mundo!. Despus, el procedimiento
DBMS_OUTPUT.PUT_LINE acepta la variable, en lugar del literal, para desplegarlo:
DECLARE
l_mensaje VARCHAR2(100) := 'Hola Mundo!';
BEGIN
DBMS_OUTPUT.put_line(l_mensaje);
END;
Note que he llamado a la variable l_mensaje. Normalmente uso el prefijo l_ para variables
locales variables definidas dentro del cdigo de un bloque y el prefijo g_ para
variables globales definidas en un paquete.
El siguiente ejemplo de bloque agrega una seccin de manejo de excepciones que atrapa
cualquier excepcin (WHEN OTHERS) que pueda ser lanzada y muestra el mensaje de
error, que es retornado por la funcin SQLERRM (provista por Oracle).
DECLARE
l_mensaje VARCHAR2(100) := 'Hola Mundo!';
BEGIN
DBMS_OUTPUT.put_line(l_mensaje);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;
Bloques PL/SQL
Un programa de PL/SQL est compuesto por bloques. Un programa est compuesto como
mnimo de un bloque.
Los bloques de PL/SQL pueden ser de los siguientes tipos:
Bloques annimos
Subprogramas
Estructura de un Bloque
Los bloques PL/SQL presentan una estructura especfica compuesta de tres partes bien
diferenciadas:
Cada una de las partes anteriores se delimita por una palabra reservada, de modo que un
bloque PL/SQL se puede representar como sigue:
[ declare | is | as ]
/*Parte declarativa*/
begin
/*Parte de ejecucion*/
[ exception ]
/*Parte de excepciones*/
end;
/*Parte declarativa*/
nombre_variable DATE;
/*Parte de ejecucion
* Este cdigo asigna el valor de la columna "nombre_columna"
* a la variable identificada por "nombre_variable"
*/
SELECT SYSDATE
INTO nombre_variable
FROM DUAL;
EXCEPTION
/*Parte de excepciones*/
WHEN OTHERS THEN
dbms_output.put_line('Se ha producido un error');
END;
donde:
tipo_dato: es el tipo de dato que va a poder almacenar la variable, este puede ser
cualquiera de los tipos soportandos por ORACLE, es decir NUMBER , DATE ,
CHAR , VARCHAR, VARCHAR2, BOOLEAN ... Adems para algunos tipos de
datos (NUMBER y VARCHAR) podemos especificar la longitud.
La clusula NOT NULL impide que a una variable se le asigne el valor nulo, y por
tanto debe inicializarse a un valor diferente de NULL.
Los tipos escalares incluyen los definidos en SQL ms los tipos VARCHAR y
BOOLEAN. Este ltimo puede tomar los valores TRUE, FALSE y NULL, y se
suele utilizar para almacenar el resultado de alguna operacin lgica. VARCHAR es
un sinnimo de CHAR.
Tambin es posible definir el tipo de una variable o constante, dependiendo del tipo
de otro identificador, mediante la utilizacin de las clusulas %TYPE y
%ROWTYPE. Mediante la primera opcin se define una variable o constante
escalar, y con la segunda se define una variable fila, donde identificador puede ser
otra variable fila o una tabla. Habitualmente se utiliza %TYPE para definir la
variable del mismo tipo que tenga definido un campo en una tabla de la base de
datos, mientras que %ROWTYPE se utiliza para declarar varibales utilizando
cursores.
Ejemplos:
Estructura de un bloque annimo.
DECLARE
/* Se declara la variable de tipo VARCHAR2(15) identificada por
v_location y se le asigna
el valor "Granada"*/
v_location VARCHAR2(15) := Granada;
por PI y se le asigna
el valor 3.1416*/
PI CONSTANT NUMBER := 3.1416;
/*Se declara la variable del mismo tipo que tenga el
campo nombre de la tabla tabla_empleados
identificada por v_nombre y no se le asigna ningn valor */
v_nombre tabla_empleados.nombre%TYPE;
/*Se declara la variable del tipo registro
correspondiente a un supuesto cursor, llamado
micursor, identificada por reg_datos*/
reg_datos micursor%ROWTYPE;
BEGIN
/*Parte de ejecucion*/
EXCEPTION
/*Parte de excepciones*/
END;
Estructura de un subprograma:
CREATE PROCEDURE simple_procedure IS
/* Se declara la variable de tipo VARCHAR2(15) identificada por
v_location y se le asigna
el valor "Granada"*/
v_location VARCHAR2(15) := Granada;
/*Se declara la constante
por PI y se le asigna
el valor 3.1416*/
PI CONSTANT NUMBER := 3.1416;
PL/SQL Placeholders
Placeholders are temporary storage area. PL/SQL Placeholders can be any of Variables, Constants
and Records. Oracle defines placeholders to store data temporarily, which are used to manipulate
data during the execution of a PL SQL block.
PL/SQL Variables
These are placeholders that store the values that can change through the PL/SQL Block.
value or DEFAULT valueis also an optional specification, where you can initialize a
variable.
For example, if you want to store the current salary of an employee, you can use a variable.
DECLARE
salary number (6);
salary number(4);
dept varchar2(10) NOT NULL := HR Dept;
The value of a variable can change in the execution or exception section of the PL/SQL
Block. We can assign values to variables in the two ways given below.
1) We can directly assign values to variables.
The General Syntax is:
variable_name:=
value;
2) We can assign values to variables directly from the database columns by using a
SELECT.. INTO statement. The General Syntax is:
SELECT column_name
INTO variable_name
FROM table_name
[WHERE condition];
Example: The below program will get the salary of an employee with id '1116' and display
it on the screen.
DECLARE
var_salary number(6);
var_emp_id number(6) = 1116;
BEGIN
SELECT salary
INTO var_salary
FROM employee
WHERE emp_id = var_emp_id;
dbms_output.put_line(var_salary);
dbms_output.put_line('The employee '
|| var_emp_id || ' has salary
END;
/
' || var_salary);
NOTE: The backward slash '/' in the above program indicates to execute the above
PL/SQL Block.
Local variables - These are declared in a inner block and cannot be referenced by
outside Blocks.
Global variables - These are declared in a outer block and can be referenced by its
itself and by its inner blocks.
For Example: In the below example we are creating two variables in the outer block and
assigning thier product to the third variable created in the inner block. The variable
'var_mult' is declared in the inner block, so cannot be accessed in the outer block i.e. it
cannot be accessed after line 11. The variables 'var_num1' and 'var_num2' can be accessed
anywhere in the block.
1> DECLARE
2> var_num1 number;
3> var_num2 number;
4> BEGIN
5> var_num1 := 100;
6> var_num2 := 200;
7> DECLARE
8>
var_mult number;
9>
BEGIN
10>
var_mult := var_num1 * var_num2;
11>
END;
12> END;
13> /