Procedimientos y Funciones en PL/SQL
Procedimientos y Funciones en PL/SQL
{ES|AS}
COMIENZO
<cuerpo_del_procedimiento>
FINprocedimiento_nombre;
Dónde,
La palabra clave AS se utiliza en lugar de la palabra clave IS para crear una independiente
procedimiento
Ejemplo
CREAR O REEMPLAZAR PROCEDIMIENTO saludos
AS
INICIAR
dbms_output.put_line('¡Hola Mundo!');
FIN;
produce el siguiente resultado indicado por–
INICIAR
saludos
FIN;
EliminacióndeProcedimiento
DECLARAR
un número
b número;
c número;
COMIENZO
SI x<y ENTONCES
z:=x;
ELSE
z:=y;
ENDIF;
FIN;
COMENZAR
a:=23;
b:=45;
encontrarMin(a,b,c);
END;
un número
INICIAR
x:=x*x;
FIN;
INICIO
a:=23;
cuadradoNum(a);
FIN;
Function
La sintaxis para la declaración CREATE FUNCTION es la siguiente:
DEVOLVER return_datatype
{ES | COMO}
INICIO
< cuerpo_de_función >
FIN [nombre_función];
Dónde,
función.
INICIAR
DE clientes;
RETORNAR total;
FIN;
CallingaFunctionthisfunction:
DECLARAR
número c(2);
INICIO
c:=totalClientes();
FIN;
Ejemplo
DECLARAR
un número
número b;
número c;
DEVOLVER número
ES
número z;
INICIO
SI x>y ENTONCES
z:=x;
ELSE
Z:=y;
ENDIF;
DEVOLVER z;
FIN;
INICIO
a:=23;
b:=45;
c:=encontrarMax(a,b);
FIN;
Cursors
Oracle crea un área de memoria, conocida como el área de contexto.
Un cursor contiene las filas (una o más) devueltas por una declaración SQL.
Cursore implícitos
Cursoresexplícitos
CursoresImplícitos
Los cursores implícitos son creados automáticamente por Oracle.
No hay un cursor explícito para la declaración. Los programadores no pueden
controlar los cursores implícitos y la información en ellos.
INSERToperations, the cursor holds the data that needs to be inserted.
Para las operaciones UPDATE y DELETE, el cursor identifica las filas.
eso se vería afectado
%ENCONTRADO
%NO ENCONTRADO
3 Siempre devuelve FALSE para cursores implícitos, porque Oracle cierra el SQL
el cursor se cierra automáticamente después de ejecutar su declaración SQL asociada.
%FILAS
Ejemplo:
DECLARAR
total_rows número(2);
INICIAR
ACTUALIZAR clientes
ESTABLECER salario=salario+500;
SI sql%noencontrado ENTONCES
total_rows:=sql%filas;
ENDIF;
FIN;
Cursoresexplícitos
Los cursores explícitos son cursores definidos por el programador para obtener más
control sobre el área de contexto.
Un cursor explícito debe ser definido en la sección de declaración del
Bloque PL/SQL.
Se crea en una declaración SELECT que devuelve más de una fila.
CURSOR c_customers ES
ABRIR c_clientes;
CERRAR c_clientes;
Ejemplo:
DECLARAR
c_id [Link]%tipo;
c_nombre [Link]%tipo;
c_addr [Link]%tipo;
CURSOR c_clientes es
INICIO
ABRIR c_clientes;
BUCLE
CERRAR c_customers;
FIN;
DECLARAR
c_id [Link]%tipo;
c_name [Link]%tipo;
c_addr [Link]ón%tipo;
CURSOR c_customersis
COMENZAR
ABRIR c_customers;
Bucle
OBTENER c_customersintoc_id,c_name,c_addr;
FINCICLO;
CERRAR c_customers;
FIN;
Registros
Un registro es una estructura de datos que puede contener elementos de datos de diferentes
tipos.
Los registros constan de diferentes campos, similares a una fila de una base de datos.
mesa.
Basado en tabla
Registros basados en cursor
User-defined records
Basado en tablas
%ROWTYPE permite a un programador crear una tabla-
registros basados en cursor y basados en posición.
Ejemplo:
DECLARAR
customer_rec customers%rowtype;
INICIAR
SELECCIONAR * EN customer_rec
DE clientes
DONDE id=5;
FIN;
DECLARAR
CURSOR customer_curis
SELECCIONAR id,nombre,dirección
DE clientes;
customer_rec customer_cur%tipo_fila;
COMENZAR
ABRIR customer_cur;
CICLO
FETCH customer_curintocustomer_rec;
DBMS_OUTPUT.put_line(customer_rec.id||' '||customer_rec.name);
FINDEBUCLE;
FIN;
RegistrosDefinidosporelUsuario:
Tipo de registro definido por el usuario que te permite definir los diferentes
estructuras de registros.
Estos registros constan de diferentes campos,
Supongamos que quieres llevar un registro de tus libros en una biblioteca.
los siguientes atributos sobre cada libro -
Título
Autor
Asunto
ID del libro
TIPO
type_name ES REGISTRO
( nombre_campo1 tipo_dato1 [NO NULO] [:= EXPRESIÓN POR DEFECTO],
nombre_campo2 tipo_dato2 [NO NULO] [:= EXPRESIÓN POR DEFECTO],
...
nombre_campoN tipo_datoN [NO NULO] [:= EXPRESIÓN POR DEFECTO];
nombre_de_registro tipo_nombre;
DECLARAR
(título varchar(50),
autor varchar(50)
asunto varchar(100)
libro1 libros;
libro2 libros;
Accediendo a este campo
DECLARAR
tipo librosesregistro
(título varchar(50),
autor varchar(50)
asunto varchar(100)
número de libro_id);
libro1 libros;
libro2 libros
INICIAR
--Book1specification
[Link]:='C Programming';
book1.book_id:=6495407;
--Book2specification
[Link]:='Telecom Billing';
[Link]:='Zara Ali';
book2.book_id:=6495700;
FIN;
Exceptions
Sintaxisparaelmanejodeexcepciones
La excepción predeterminada se manejará utilizando CUANDO otros ENTONCES.
DECLARAR
<sección de declaraciones>
INICIO
<comando(s) ejecutable(s)>
EXCEPCIÓN
<manejo de excepciones va aquí>
declaraciones-de-manejo-de-excepciones1
excepciones2-manejo-de-declaraciones
excepciones3-manejo-de-declaraciones
........
instrucciones-de-manejo-de-excepciones3
FIN;
Ejemplo:
DECLARAR
c_id [Link]%type:=8;
c_name [Link]%tipo;
c_direccion [Link]%tipo;
INICIAR
DE clientes
WHERE id=c_id;
DBMS_OUTPUT.PUT_LINE('Nombre: '||c_name);
DBMS_OUTPUT.PUT_LINE('Dirección: '||c_addr);
EXCEPCIÓN
dbms_output.put_line('¡Error!');
FIN;
Lanzarexcepciones:
Servidor de base de datos automáticamente siempre que haya alguna base de datos interna
error, pero las excepciones pueden ser lanzadas explícitamente por el programador
usando el comando AUMENTAR
Sintaxis de la Excepción definida por el usuario
DECLARAR
exception_name EXCEPTION;
COMENZAR
SI condición ENTONCES
LEVANTAR exception_name;
ENDIF;
EXCEPCIÓN
declaración;
FIN;
Ejemplo :
DECLARAR
c_id [Link]%tipo;
c_name [Link]%tipo;
c_addr [Link]ón%tipo;
-- excepción definida por el usuario
ex_id_inválido EXCEPCIÓN;
COMENZAR
SI c_id <= 0 ENTONCES
LEVAR ex_invalid_id;
ELSE
SELECCIONAR nombre, dirección EN c_nombre, c_dirección
DE clientes
DONDE id = c_id;
FIN SI;
EXCEPCIÓN
CUANDO ex_invalid_id ENTONCES
dbms_output.put_line('¡Error!');
FIN;
DECLARAR
c_nombre [Link]%tipo;
c_addr [Link]ón%tipo;
ex_id_invalido EXCEPCIÓN;
INICIO
SI c_id<=0 ENTONCES
LEVANTAR ex_invalid_id;
SINO
DE clientes
DONDE id=c_id;
DBMS_OUTPUT.PUT_LINE('Nombre: '||c_name);
DBMS_OUTPUT.PUT_LINE('Dirección: '||c_addr);
ENDIF;
EXCEPCIÓN
dbms_output.put_line('¡Error!');
FIN;
Desencadenantes
[DE col_name]
EN table_name
CUANDO(condición)
DECLARAR
Declaraciones de declaración
INICIAR
Declaraciones ejecutables
EXCEPCIÓN
FIN;
Dónde,
[REFERENCING OLD AS o NEW AS n] − This allows you to refer new and old values
para varias declaraciones DML, como INSERTAR, ACTUALIZAR y ELIMINAR.
[POR CADA FILA] - Esto especifica un disparador a nivel de fila, es decir, el disparador será
se ejecuta por cada fila afectada. De lo contrario, el desencadenador se ejecutará solo una vez
cuando se ejecuta la declaración SQL, se llama a un desencadenador a nivel de tabla.
CUANDO (condición) - Esto proporciona una condición para las filas para las cuales el disparador sería
fuego. Esta cláusula es válida solo para desencadenadores a nivel de fila.