0% encontró este documento útil (0 votos)
54 vistas

PL SQL

PL/SQL es un lenguaje de programación incrustado en Oracle que permite manipular datos en la base de datos. Soporta variables, estructuras de control, excepciones y se puede utilizar para crear procedimientos, funciones y paquetes que se almacenan en la base de datos para su reutilización. Los programas PL/SQL se ejecutan en el servidor para ahorrar recursos a los clientes.

Cargado por

Compu Soluciones
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas

PL SQL

PL/SQL es un lenguaje de programación incrustado en Oracle que permite manipular datos en la base de datos. Soporta variables, estructuras de control, excepciones y se puede utilizar para crear procedimientos, funciones y paquetes que se almacenan en la base de datos para su reutilización. Los programas PL/SQL se ejecutan en el servidor para ahorrar recursos a los clientes.

Cargado por

Compu Soluciones
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

PL/SQL 

(Procedural Language/Structured Query Language)


Es un lenguaje de programación incrustado en Oracle.
PL/SQL soportará todas las consultas, ya que la manipulación de datos que se
usa es la misma que en SQL, incluyendo nuevas características:

 El manejo de variables.
 Estructuras modulares.
 Estructuras de control de flujo y toma de decisiones.
 Control de excepciones.
El lenguaje PL/SQL está incorporado en:

 Servidor de la base de datos.


 Herramientas de Oracle (Forms, Reports).
En un entorno de base de datos los programadores pueden construir bloques
PL/SQL para utilizarlos como procedimientos o funciones, o bien pueden escribir
estos bloques como parte de scripts SQL*Plus.
Los programas o paquetes de PL/SQL se pueden almacenar en la base de datos
como otro objeto, y todos los usuarios que estén autorizados tienen acceso a
estos paquetes. Los programas se ejecutan en el servidor para ahorrar recursos a
los clientes.

Identificadores
Un identificador es un nombre que se le pone a un objeto que interviene en un
programa, que puede ser variable, constante, procedimientos, excepciones,
cursores... Debe tener un máximo de 30 caracteres que empiece siempre por una
letra, y puede contener letras, números, los símbolos $, #, _, y mayúsculas y
minúsculas indiferentemente. Los identificadores no pueden ser palabras
reservadas (SELECT, INSERT, DELETE, UPDATE, DROP).

Variables
Las variables son nombres para procesar los elementos de los datos. Declaración:

Nombre_variable tipo [NOT NULL] [:= valor | DEFAULT valor]


:= y DEFAULT son lo mismo. Si ponemos NOT NULL es obligatorio
inicializar la variable.

Constantes]
Las constantes son como las variables pero no puede modificarse su valor. Se
declaran de la siguiente manera:
nombre_constante CONSTANT tipo_de_dato := valor

Por ejemplo, el IVA es un valor fijo, y para declararlo lo haríamos de la siguiente


manera:

Imp_iva constant number(3,1) := 12,5

Bloque PL/SQL
Bloque es la unidad de estructura básica en los programas PL/SQL. Supone una
mejora en el rendimiento, pues se envían los bloques completos al servidor para
ser procesados en lugar de enviar cada secuencia SQL.
Partes de un bloque:

 Zona de declaraciones: zona opcional. Se declaran los objetos locales


(variables, constantes...).
 Zona de instrucciones: zona obligatoria.
 Zona de tratamiento de excepciones: zona opcional. Se tratan excepciones en
el programa.
Forma de crear un bloque:
[ DECLARE | IS / AS ]
<declaraciones>
BEGIN
<instrucciones>
[ EXCEPTION ]
<tratamiento de excepciones>
END;
/
Procedimiento
Los procedimientos tienen la utilidad de fomentar la reutilización de programas que
se usan comúnmente. Una vez compilado, queda almacenado en la base de datos
(por eso es también llamado 'Procedimiento almacenado') y puede ser utilizado
por múltiples aplicaciones.
La sintaxis es la siguiente
CREATE [OR REPLACE] PROCEDURE
nombre_procedimiento
[nombre_parametro modo tipodatos_parametro ]
IS | AS

Bloque de código
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el
valor IN si no se pone nada. IN indica que el parámetro es de entrada y no se
podrá modificar. OUT indica que el parámetro es de salida con lo que el
procedimiento devolverá un valor en él. IN OUT indica que el parámetro es de
entrada/salida. Con lo que al llamar al procedimiento se le dará un valor que luego
podrá ser modificado por el procedimiento y devolver este nuevo valor.

"tipodatos_parametro indica el tipo de datos que tendrá el parámetro según lo


indicado en Tipos de datos Oracle/PLSQL
Para borrar un procedimiento almacenado de la base de datos
DROP PROCEDURE nombre_procedimiento

Para utilizar un procedimiento almacenado de la base de datos


Simplemente se lo llama desde un bloque anónimo (desde la línea de comandos),
previamente habiendo inicializado el/los parametro/s (en caso que existan).

DECLARE
nombre_parametro tipodatos_parametro;
BEGIN
nombre_parametro tipodatos_parametro := valor_de_inicializacion;
nombre_procedimiento (nombre_parametro => nombre_parametro);
END;
/

Funciones
Una función es un bloque de código PL/SQL que tiene las mismas características
que un procedimiento almacenado. La diferencia estriba que una función devuelve
un valor al retornar. Al devolver un valor puede ser llamado como parte de una
expresión.
La sintaxis sería
CREATE [OR REPLACE] FUNCTION nombre_función
[nombre_parámetro modo tipodatos_parametro ]
RETURN tipodatos_retorno IS | AS
bloque de código

Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el
valor IN si no se pone nada. IN indica que el parámetro es de entrada y no se
podrá modificar. OUT indica que el parámetro es de salida con lo que la función
devolverá un valor en él. IN OUT indica que el parámetro es de entrada/salida.
Con lo que al llamar a la función se le dará un valor que luego podrá ser
modificado por la misma y devolver este nuevo valor. Sin embargo, en este caso
solo tendría sentido (por el concepto de función en sí mismo) declarar parámetros
del tipo IN y devolver el valor como retorno de la función.

"tipodatos_parametro" y "tipodatos_retorno" indican el tipo de datos que tendrá el


parámetro y el valor de retorno de la función respectivamente según lo indicado
en Tipos de datos Oracle/PLSQL
Para borrar una función de la base de datos
DROP FUNCTION nombre_función

Los procedimientos y funciones se pueden agrupar en unas estructuras


llamadas Paquetes.

Paquetes
Se usan para agrupar procedimientos y funciones. Facilitan la descomposición
modular y el mantenimiento.
Constan de dos partes: la especificación o prototipo y el cuerpo.
Especificación
Se declaran los elementos públicos que componen el paquete, es decir, variables,
funciones y procedimientos que serán accesibles desde fuera del paquete. De las
funciones y procedimientos solo indicamos la cabecera, no el cuerpo.

CREATE [OR REPLACE] PACKAGE nombrePaquete


IS|AS
variables, constantes, cursores, etc (públicos)
cabecera de procedimientos y funciones
END nombrePaquete;
TRIGGER
Un trigger o disparador se ejecuta ante un determinado evento de manera
automática. Generalmente se utilizan para garantizar que una determinada acción
siempre se realiza después de realizar una tarea determinada. Se debe tener
cuidado con este tipo de estructuras puesto que un uso excesivo puede dar lugar
a dependencias difíciles de mantener. Además se deben tener muy claros las
restricciones de integridad para evitar problemas.
La sintaxis sería
A nivel de sentencia:
CREATE [OR REPLACE] TRIGGER nombre_trigger
momento_ejecución evento [evento] ON nombre_tabla
bloque PLSQL;
Donde "momento_ejecución" indica cuando se ejecuta el trigger automáticamente.
Puede contener los valores BEFORE ó AFTER.
"evento" indica la operación que provoca la ejecución de este bloque. Puede
contener los valores INSERT, UPDATE ó DELETE.
"old" indica el nombre que se le da al registro con los valores antiguos que se
tenían antes de la ejecución de la operación que activó el trigger. Mientras que
"new" indica el valor que tiene actualmente después de dicha operación.
Con la cláusula "WHEN" se puede indicar una restricción que haga que el trigger
se ejecute o no. Por ejemplo se puede indicar que el trigger se ejecute solo si el
campo "campo1" de la tabla tiene un valor mayor que 50.
La cláusula "FOR EACH ROW" indica que el trigger es a nivel de registro.

Para eliminar un trigger:


DROP TRIGGER nombre_trigger

Cursores

   PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es


un conjunto de registros devuelto por una instrucción SQL. Técnicamente los
cursores son fragmentos de memoria que reservados para procesar los resultados
de una consulta SELECT.  

   Podemos distinguir dos tipos de cursores:

 Cursores implicitos. Este tipo de cursores se utiliza para operaciones SELECT


INTO. Se usan cuando la consulta devuelve un único registro.
 Cursores explicitos. Son los cursores que son declarados y controlados por el
programador. Se utilizan cuando la consulta devuelve un conjunto de registros.
Ocasionalmente también se utilizan en consultas que devuelven un único registro
por razones de eficiencia. Son más rápidos.
Un cursor se define como cualquier otra variable de PL/SQL y debe nombrarse de
acuerdo a los mismos convenios que cualquier otra variable. Los cursores
implicitos no necesitan declaración.

El siguiente ejemplo declara un cursor explicito:

declare
cursor c_paises is
SELECT CO_PAIS, DESCRIPCION
FROM PAISES;
begin
/* Sentencias del bloque ...*/
end;

Para procesar instrucciones SELECT que devuelvan más de una fila, son
necesarios cursores explicitos combinados con un estructura de bloque.

Un cursor admite el uso de parámetros. Los parámetros deben declararse junto


con el cursor.

El siguiente ejemplo muestra la declaracion de un cursor con un parámetro,


identificado por p_continente.

declare
cursor c_paises (p_continente IN VARCHAR2) is
SELECT CO_PAIS, DESCRIPCION
FROM PAISES

WHERE CONTINENTE = p_continente;


begin
/* Sentencias del bloque ...*/
end;

Packages

Un paquete es una estructura que agrupa objetos de PL/SQL compilados


(procedures, funciones, variables, tipos ...) en la base de datos. Esto nos permite
agrupar la funcionalidad de los procesos en programas.

Lo primero que debemos tener en cuenta es que los paquetes están formados por
dos partes: la especificación y el cuerpo. La especificación del un paquete y su
cuerpo se crean por separado.
    La especificación es la interfaz con las aplicaciones. En ella es posible declarar
los tipos, variables, constantes, excepciones, cursores y subprogramas
disponibles para su uso posterior desde fuera del paquete. En la especificación del
paquete sólo se declaran los objetos (procedures, funciones, variables ...), no se
implementa el código. Los objetos declarados en la especificación del paquete son
accesibles desde fuera del paquete por otro script de PL/SQL o programa.
Haciendo una analogía con el mundo de C, la especificación es como el archivo
de cabecera de un programa en C.  

CREATE [OR REPLACE] PACKAGE <pkgName>


IS
  
  -- Declaraciones de tipos y registros públicas
  {[TYPE <TypeName> IS <Datatype>;]}
 
  -- Declaraciones de variables y constantes publicas
-- También podemos declarar cursores
  {[<ConstantName> CONSTANT <Datatype> := <valor>;]} 
  {[<VariableName> <Datatype>;]}
  -- Declaraciones de procedimientos y funciones públicas

  {[FUNCTION <FunctionName>(<Parameter> <Datatype>,...)


RETURN <Datatype>;]}
{[PROCEDURE <ProcedureName>(<Parameter> <Datatype>, ...);]}
END <pkgName>;

    El cuerpo el laimplementación del paquete. El cuerpo del paquete debe


implementar lo que se declaró inicialmente en la especificación. Es el donde
debemos escribir el código de los subprogramas. En el cuerpo de un package
podemos declarar nuevos subprogramas y tipos, pero estos seran privados para el
propio package.  

    La sintaxis general para crear el cuerpo de un paquete es muy parecida a la de


la especificación, tan solo se añade la palabra clave BODY, y se implementa el
código de los subprogramas.

También podría gustarte