Implementación de reglas de construcción en PL/SQL

RECU-0736 (Recurso Ejemplo)

Descripción

A continuación se muestran ejemplos que implementan las reglas de construcción para PL/SQL

Ejemplos

%TYPE y %ROWTYPE

%TYPE se usa para declarar una variable que tendrá el mismo tipo que una columna de una tabla.
%ROWTYPE se usa para declarar un registro con los mismos tipos de la tabla, vista o cursor de la base de datos.

DECLARE
v_EmpName emp.ename%TYPE;
BEGIN
SELECT ename INTO v_EmpName FROM emp WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('Name = '|| v_EmpName);
END;
DECLARE
v_emp emp%ROWTYPE;
BEGIN
v_emp.empno :=10;
v_emp.ename :='XXXXXXX';
END;
 

SUBTYPE

Se usan para declarar un nuevo tipo de datos personalizado a partir de un tipo disponible en la base de datos

Sintaxis:

SUBTYPE <nombre_subtipo> IS <tipo_base> [(constraint)] [NOT NULL];
-- tipo_base puede se un tipo de dato predefinido, un subtipo, una variable %TYPE o %ROWTYPE.
Uso: -- El bloque PL/SQL que se muestra a continuación declara un subtipo HIREDATE, del tipo DATE, que no
-- puede ser nulo. Posteriormente se crea una variable, PFDATE, de tipo HIREDATE y se inicializa con la
-- fecha del sistema.
DECLARE
   SUBTYPE HIREDATE IS DATE NOT NULL;
   PFDATE HIREDATE := SISDATE;
DEGIN
   DBMS_OUTPUT.PUT_LINE(PFDATE);
END;

CONSTANT

Es una variable que se define y se declara una vez, y que no cambia en tiempo de ejecución

Sintaxis:
constant_name CONSTANT datatype [NOT NULL] { := | DEFAULT } expression;
Uso:
C_WIDTH CONSTANT numeric(8,1) := 25.1;

Inicialización de variables complejas

Las variables complejas se inician en la sección ejecutable para que los errores que se puedan producir en su inicialización puedan ser capturados y tratados

CREATE OR REPLACE PROCEDURE find_bestsellers
IS
   l_last_title book.title%TYPE;
   l_min_count INTEGER(3);
   PROCEDURE init IS
   BEGIN
       l_last_title:= last_search (SYSDATE);
       l_min_count:=
           bestseller.limits (bestseller.low);
   EXCEPTION
   -- Captura y maneja todos los errores
   -- dentro del programa
   END;
BEGIN
  init;

Expresiones lógicas y funciones

Las variables lógicas y las funciones permiten enmascarar expresiones complejas, facilitando la comprensión del código.
El siguiente código:

IF total_sal BETWEEN 10000 AND 50000 AND
    emp_status (emp_rec.empno) = 'N' AND
    (MONTHS_BETWEEN
        (emp_rec.hiredate, SYSDATE) > 10)
THEN
    give_raise (emp_rec.empno);
END IF;

es más dificil de comprender que:

IF eligible_for_raise (totsal, emp_rec)
THEN
    give_raise (emp_rec.empno);
END IF;

Centralización de definiciones TYPE en paquetes específicos

En PL/SQL, usted definirá muchos TIPOS (TYPE) de cosas, incluyendo:

  • Los subtipos que definen tipos de datos de aplicación específicos.
  • Tipos de colección, como las listas de números, fechas, o registros.
  • Tipos de cursor referidos, por lo cuál, son declaradas las variables de cursor. Algunos de estos tipos pueden ser usados sin sufrir modificaciones.

En uno u otro caso, la creación de un paquete permite que estos tipos puedan ser reutilizados en múltiples programas.

CREATE OR REPLACE PACKAGE colltype
IS
    TYPE boolean_ntab IS TABLE OF BOOLEAN;
    TYPE boolean_ibtab IS TABLE OF BOOLEAN
     INDEX BY BINARY_INTEGER;
    TYPE date_ntab IS TABLE OF DATE;
    TYPE date_ibtab IS TABLE OF DATE
     INDEX BY BINARY_INTEGER;
...
END colltype;

Contenidos relacionados

Recursos