Está en la página 1de 6

Lenguaje PL/SQL

Santiago Faci
santi@rastafurbi.org

6 de Enero de 2004

Contents
1 Introducción al lenguaje PL/SQL 2

2 Estructura de un bloque PL/SQL 2

3 Tipos de datos 2

4 Identificadores 2

5 Variables y constantes 2
5.1 Declaración de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5.2 Declaración de constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

6 Operadores 3

7 Funciones 3

8 Estructuras de control 3

9 Procedimientos y Funciones 5
9.1 Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

10 Interacción con el usuario 6

11 Cursores 6

1
1 INTRODUCCIÓN AL LENGUAJE PL/SQL 2

1 Introducción al lenguaje PL/SQL


PL/SQL es un lenguaje procedimental diseñado por Oracle para trabajar con la base de datos. Soporta
todos los comandos de consulta y manipulación de datos, aportando al lenguaje SQL las estructuras de
control y otros elementos propios de los lenguajes procedimentales de tercera generación. La unidad
mı́nima de trabajo es el bloque, es un lenguaje estructurado en bloques.

2 Estructura de un bloque PL/SQL


[ <cabecera_bloque> ]
[ DECLARE
<constantes>
<variables>
<cursores>
<excepciones_usuario> ]
BEGIN
<sentencias_pl/sql>
[ EXCEPTION
<manejador_excepción> ]
END;

Donde:

• cabecera bloque especifica si el bloque es un procedimiento, una función o un paquete. Si no se


especifica cabecera, se dice que es un bloque anónimo.

3 Tipos de datos
El lenguaje PL/SQL dispone de todos los tipos de datos de SQL y además incorpora alguno propio como
el BOOLEAN que almacena valores TRUE, FALSE ó NULL.

4 Identificadores
Los identificadores, como en todo lenguaje de programación, se utilizan para nombrar a los objetos que
se emplean en un programa: variables, constantes, nombres de procedimientos y funciones, etc . . . En
PL/SQL se permiten identificadores de hasta 30 caracteres, empezando siempre por una letra, seguida de
más letras, números, signo de dolar, almohadilla o guión bajo.

5 Variables y constantes
5.1 Declaración de variables
Todas las variables deben declararse antes de poder ser usadas en la sección correspondiente. El formato
para su declaración es el siguiente:

<nombre_variable> <tipo> [ NOT NULL ] [ { := | DEFAULT } <valor> ]


6 OPERADORES 3

Ejemplo:

DECLARE
nombre CHAR(20) NOT NULL;
valor NUMBER(2) := 0;
fecha DATE;

5.2 Declaración de constantes


Las constantes se declaran siguiendo el formato siguiente:

<nombre_constante> CONSTANT <tipo> := <valor>

En este caso siempre se deberá asignar un valor en la declaración, puesto que se trata de una con-
stante, tal y como ocurre con los lenguajes de tercera generación.
Ejemplo:

numeroDiez CONSTANT NUMBER := 10;

6 Operadores
Al igual que cualquier otro lenguaje, PL/SQL dispone de los operadores más comunes.

• Operador de asignación := para asignar valores a las variable o constantes en su declaración.

num := 10;

• Operadores lógicos AND, OR y NOT.

• Operador de concatenación || empleado para concatenar cadenas:

"que" || "tal" ---> "quetal"

• Operadores de comparación =, !=, <, >, <=, >=, IS NULL, BETWEEN, LIKE,
IN, . . . tal y como se utilizaban en el lenguaje SQL.

• Operadores aritméticos +, -. *. /

7 Funciones
Con el lenguaje PL/SQL podremos hacer uso de todas las funciones que veiamos en SQL aunque las
funciones de grupo como COUNT ó SUM sólo pueden ser usadas dentro de sentencias SELECT.

8 Estructuras de control
PL/SQL dispone de algunas estructuras de control que permiten controlar el flujo del programa tal y
como se hace en los lenguajes de tercera generación.
8 ESTRUCTURAS DE CONTROL 4

IF
IF <condición1> THEN
<instrucciones1>
[ { ELSIF <condición2> THEN
<instrucciones2> } ]
[ ELSE
<instrucciones3> ]
END IF;

LOOP
LOOP
<instrucciones>
( IF <condición> THEN
EXIT
END IF; )
|
(EXIT WHEN <condición> )
<instrucciones>
END LOOP

WHILE
WHILE <condición> LOOP
<instrucciones>
END LOOP;

FOR
FOR <variable_control> IN [ REVERSE ] <valor_inicial>..<valor_final> LOOP
<instrucciones>
END LOOP

GOTO etiqueta
Podemos emplear también la sentencia GOTO seguida de la etiqueta a la que deberá saltar el flujo del pro-
grama. Dicha etiqueta deberá haber sido ’marcada’ previamente en algún punto del programa siguiendo
este formato:

. . .
<<borra_filas>>
DELETE FROM . . .
. . .

Ası́, la etiqueta GOTO que quiera hacer saltar el flujo del programa a la etiqueta anterior, tendrá esta
forma:
9 PROCEDIMIENTOS Y FUNCIONES 5

. . .
GOTO borra_filas
. . .

Para un correcto uso de esta sentencia, habrá que respetar una serie de normas:

• No puede haber dos etiquetas con el mismo nombre.

• La etiqueta deberá preceder a un bloque o un conjunto de instrucciones ejecutables.

• La etiqueta no puede estar dentro de un IF, un LOOP o sub-bloque internos al bloque desde donde
se quiere hacer el salto.

9 Procedimientos y Funciones
En el lenguaje PL/SQL nos encontramos también con el concepto de subprograma: procedimientos y
funciones al igual que en los lenguajes procedimentales de tercera generación. En este caso, podemos
guardarlos en la base de datos y ejecutarlos desde otros subprogramas.

9.1 Procedimientos
Siguen este formato:

PROCEDURE <nombre_procedimiento>
[ ’(’ <lista_de_parámetros> ’)’ ]
IS
<declaraciones>
BEGIN
<instrucciones>
EXCEPTION
<excepciones>
END [ <nombre_procedimiento> ]

Para crear un procedimiento tendremos que utilizar el siguiente formato:

CREATE [ OR REPLACE ] PROCEDURE <nombre_procedimiento>

Ejemplo:

9.2 Funciones
La declaración de funciones sigue el siguiente formato:

FUNCTION <nombre_función>
[ ’(’ <lista_de_parámetros> ’)’ ]
RETURN <tipo_de_valor_devuelto>
IS
<declaraciones>
BEGIN
10 INTERACCIÓN CON EL USUARIO 6

<instrucciones>
RETURN <expresión>
EXCEPTION
<excepciones>
END <nombre_función>

Al igual que se hace con la creación de procedimientos, para crear una función, lo haremos de la
siguiente forma:

CREATE [ OR REPLACE ] FUNCTION <nombre_función>

10 Interacción con el usuario


Aunque el objetivo del lenguaje PL/SQL no es la interactuación con el usuario (No permite la intro-
ducción de datos por parte de éste), dispone de un procedimiento que permite visualizar texto por la
pantalla con fines de depuración. Se trata del procedimiento PUT LINE del paquete DBMS OUTPUT:

DBMS_OUTPUT.PUT_LINE(<expresión>)

Para su correcto funcionamiento se debe dar el valor ON a la variable SERVEROUTPUT.


También es posible solicitar la introducción del valor de una variable en bloques PL/SQL an-
teponiendo el sı́mbolo & al nombre de la variable de la siguiente forma:

. . .
SELECT nombre INTO v_nombre
FROM ALUMNOS
WHERE nexp= ’&v_nexp’
. . .

11 Cursores
Los cursores sirven para guardar el resultado de cualquier consulta que hagamos desde algún programa
escrito en lenguaje PL/SQL. Emplearemos el siguiente formato para realizar la consulta si utilizamos
cursores:

SELECT <columnas> INTO <variables> FROM <tablas> [ WHERE . . .

Las variables que van justo después de la cláusula INTO recibirán el valor de la consulta, por lo tanto
deberán haber correspondencia de tipos entre ellas y el resultado que vayan a almacenar.

DECLARE
v_nombre VARCHAR(10);
v_curso NUMBER;
BEGIN
SELECT nombre, curso INTO v_nombre, v_curso
FROM ALUMNOS WHERE nexp = ’10003’;
DBMS_OUTPUT.PUT_LINE(v_nombre||’->’||v_curso);
END;

También podría gustarte