Show Menu
Cheatography

PLSQL Cheat Sheet (DRAFT) by

PL/SQL (Procedural Language/Structured Query Language) es un lenguaje de programación utilizado para desarrollar aplicaciones que interactúan con bases de datos Oracle. PL/SQL combina elementos de SQL para manipular datos y elementos de programación procedural para controlar el flujo de ejecución de un programa.

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Bloque PL/SQL

Un bloque PL/SQL es una unidad de código que contiene una o más sentencias PL/SQL. La estructura general de un bloque PL/SQL es la siguiente:

Estructura general de un bloque

DECLARE
  -- Declaraciones de variables locales y tipos de datos personalizados
BEGIN
  -- Sentencias PL/SQL
  -- Incluyendo sentencias SELECT, INSERT, UPDATE, DELETE, y llamadas a procedimientos y funciones
  EXCEPTION
  -- Manejo de errores
END;

Ejemplo

DECLARE
  resultado NUMBER;
BEGIN
  resultado := 10 + 5;
  DBMS_OUTPUT.PUT_LINE('El resultado es: ' || resultado);
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;

Estructura general

DECLARE
se utiliza para declarar variables locales y tipos de datos person­ali­zados que se utilizarán dentro del bloque.
BEGIN
se colocan las sentencias PL/SQL que realizan alguna operación.
EXCEPTION
se utiliza para manejar cualquier error que ocurra durante la ejecución del bloque PL/SQL.

Declar­ación variables

DECLARE
    <Nombre> <Tipo> :=  <Valor>;

DECLARE
    nombre VARCHAR2(50) := 'Juan';

DECLARE
    es_verdadero BOOLEAN := TRUE;

DECLARE
    edad NUMBER:= 25;

Declar­ación constantes

DECLARE
    <Nombre> CONSTANT <Tipo> :=  <Valor>;

DECLARE
    nombre CONSTANT  VARCHAR2(50) := 'Juan';

DECLARE
    es_verdadero CONSTANT  BOOLEAN := TRUE;

DECLARE
    edad CONSTANT  NUMBER:= 25;

Proces­dim­ientos y funciones

Los proced­imi­entos y las funciones son subpro­gramas que permiten agrupar y reutilizar bloques de código. Los proced­imi­entos se utilizan para realizar acciones o tareas, mientras que las funciones devuelven un valor

Proced­imi­entos

CREATE OR REPLACE PROCEDURE imprimir_saludo(nombre IN VARCHAR2) IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('¡Hola, ' || nombre || '!');
    END;

-- Uso del procedimiento
BEGIN
  imprimir_saludo('Juan');
END;

Funciones

CREATE OR REPLACE FUNCTION totalCustomers 
RETURN number IS 
   total number(2) := 0; 
BEGIN 
   SELECT count(*) into total 
   FROM customers; 
    
   RETURN total; 
END;
 

Instru­cciones de control

Las instru­cciones de control en PL/SQL permiten controlar el flujo de ejecución de un programa, permit­iendo tomar decisiones y repetir acciones según sea necesario.

IF-THE­N-ELSE

Esta instru­cción se utiliza para tomar decisiones basadas en una condición. Si la condición es verdadera, se ejecuta un bloque de código; de lo contrario, se ejecuta un bloque de código diferente.

Ejemplo

DECLARE
   salario number := 5000;
BEGIN
   IF salario > 5000 THEN
      dbms_output.put_line('Salario alto');
   ELSE
      dbms_output.put_line('Salario bajo');
   END IF;
END;

CASE

Esta instru­cción se utiliza para tomar decisiones basadas en múltiples condic­iones. Se pueden definir varios casos, cada uno con su propia condición y código a ejecutar.

Ejemplo

DECLARE
   dia_semana number := 2;
BEGIN
   CASE dia_semana
      WHEN 1 THEN dbms_output.put_line('Lunes');
      WHEN 2 THEN dbms_output.put_line('Martes');
      WHEN 3 THEN dbms_output.put_line('Miércoles');
      WHEN 4 THEN dbms_output.put_line('Jueves');
      WHEN 5 THEN dbms_output.put_line('Viernes');
      ELSE dbms_output.put_line('Fin de semana');
   END CASE;
END;

FOR LOOP

Esta instru­cción se utiliza para repetir una acción un número determ­inado de veces.

Ejemplo

DECLARE
   i number;
BEGIN
   FOR i IN 1..5 LOOP
      dbms_output.put_line('Iteración ' || i);
   END LOOP;
END;

WHILE LOOP

Esta instru­cción se utiliza para repetir una acción mientras se cumple una condición.

Ejemplo

DECLARE
   i number := 1;
BEGIN
   WHILE i <= 5 LOOP
      dbms_output.put_line('Iteración ' || i);
      i := i + 1;
   END LOOP;
END;

Cursores

En SQL, un cursor es una estructura de control utilizada para recorrer y manipular filas de un resultado de consulta de forma secuen­cial. Los cursores propor­cionan un mecanismo para procesar registros uno a uno y realizar operac­iones especí­ficas en cada uno de ellos.

Ejemplo

DECLARE
  -- Declaración del cursor
  CURSOR c_empleados IS
    SELECT salario FROM Empleados;
  
  -- Variables auxiliares
  total_salarios NUMBER := 0;
  contador NUMBER := 0;
  promedio_salarios NUMBER;
BEGIN
  -- Abrir el cursor
  OPEN c_empleados;
  
  -- Recorrer el cursor y calcular el total de los salarios
  FOR empleado IN c_empleados LOOP
    total_salarios := total_salarios + empleado.salario;
    contador := contador + 1;
  END LOOP;
  
  -- Calcular el promedio de los salarios
  IF contador > 0 THEN
    promedio_salarios := total_salarios / contador;
    DBMS_OUTPUT.PUT_LINE('El promedio de los salarios es: ' || promedio_salarios);
  ELSE
    DBMS_OUTPUT.PUT_LINE('No se encontraron empleados');
  END IF;
  
  -- Cerrar el cursor
  CLOSE c_empleados;
END;
 

Trigger BEFORE

Se ejecuta antes de que se aplique una operación en la tabla. Puede utilizarse para validar o modificar los datos antes de que se realice la acción en la tabla.

Ejemplo

CREATE OR REPLACE TRIGGER before_insert_trigger
BEFORE INSERT ON mi_tabla
FOR EACH ROW
BEGIN
  IF :new.valor > 0 THEN
    -- Permitir la inserción
    NULL;
  ELSE
    -- Cancelar la inserción
    RAISE_APPLICATION_ERROR(-20001, 'El valor debe ser mayor que cero.');
  END IF;
END;

Trigger AFTER

Un trigger AFTER se ejecuta después de que se haya aplicado una operación en la tabla. Se utiliza princi­pal­mente para realizar acciones poster­iores a la modifi­cación de datos.

Ejemplo

CREATE OR REPLACE TRIGGER after_update_trigger
AFTER UPDATE ON mi_tabla
FOR EACH ROW
BEGIN
  INSERT INTO historial_tabla (id_registro, fecha_modificacion)
  VALUES (:old.id, SYSDATE);
END;
/

Trigger INSTEAD OF

 
Un trigger INSTEAD OF se utiliza en vistas actual­izables y permite reemplazar la acción predet­erm­inada que se llevaría a cabo en una operación de inserción, actual­ización o elimin­ación en la vista

Ejemplo

CREATE OR REPLACE TRIGGER instead_of_insert_trigger
INSTEAD OF INSERT ON mi_vista
BEGIN
  RAISE_APPLICATION_ERROR(-20002, 'La vista no es actualizable.');
END;
/

Excepción

Evento que ocurre durante la ejecución de un bloque de código que interrumpe el flujo normal del programa. Las excepc­iones pueden ser causadas por errores de progra­mación, condic­iones imprev­istas o errores del sistema.

Tipos

Predef­inidas
ya están definidas en el lenguaje, como la excepción "­NO_­DAT­A_F­OUN­D" que se lanza cuando una consulta SELECT no devuelve ninguna fila.
Definidas por el usuario
son excepc­iones person­ali­zadas creadas por el progra­mador para manejar situac­iones especí­ficas en su código.
De sistema
son excepc­iones generadas por el sistema, como la excepción "­ORA­-00001: unique constraint violat­ed" que se lanza cuando se intenta insertar una fila con una clave primaria duplicada.

Manejo de Excepc­iones

Se utiliza la estructura TRY-CATCH. El código que se sospecha que puede generar una excepción se coloca dentro del bloque TRY. Si se produce una excepción dentro del bloque TRY, se activa la excepción y el control se transfiere al bloque CATCH. Dentro del bloque CATCH, se puede propor­cionar una respuesta a la excepción y tomar medidas para manejarla.

Ejemplo

DECLARE
  v_emp_name VARCHAR2(50);
BEGIN
  SELECT emp_name INTO v_emp_name FROM employees WHERE emp_id = 1000;
  DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No employee found with ID 1000');
END;

Triggers

Es un bloque de código que se ejecuta automá­tic­amente en respuesta a ciertos eventos, como la inserción, actual­ización o elimin­ación de filas en una tabla.

Uso

Un trigger puede ser utilizado para realizar acciones especí­ficas antes o después de que ocurra un evento, como validar datos, auditar cambios, actualizar valores relaci­onados, entre otras acciones.