PL/SQL
Lenguaje procedural orientado a objetos
O se cumple todo o nada
Esquema o plantilla a seguir:
SET SERVEROUTPUT ON; -> Activar servicio que permite tener salida de información en SGDB
TRIM(CAMPO1) || ‘ ‘ || TRIM(CAMPO2) -> quita espacios en blanco, por si se tienen tipos Char
TO_CHAR(CAMPO) -> pasa a cadena un tipo de dato
NVL() -> si una función devuelve null el devolverá un cero
BLOQUES -> líneas de código sql
Bloques anónimos -> son simples lineas de código, no pueden ser invocados
Bloques nominados -> son bloques de código que pueden ser invocados
1. DECLARE -> zona de definición de variables (No es obligatorio)
nombrevariable tipo(rango):= valor;
vnombre VARCHAR2(35):= ‘oscar’;
vsalario NUMBER:= 3000;
nombrevariable [Link]%TYPE:= valor;
varid [Link]%TYPE:= 47;
vsalida VARCHAR2(80);
variables de sustitución (&) -> valores que se le pide al usuario por teclado
varid [Link]%TYPE:= ’&ingresar_id’;
2. BEGIN -> zona de ejecución transaccional (obligatoria)
DELETE FROM TEMPORAL;
SELECT TRIM(NOMBRE) || ‘ ‘ || TRIM (APELLIDO) || TO_CHAR(CREDITOS)
INTO vsalida
FROM ESTUDIANTES
WHERE ID = vaird;
--mostrar
DBMS_OUTPUT.PUT_LINE(‘INFO: ‘ || vsalida);
INSERT INTO TEMPORAL(columnacaracter)
VALUES(vsalida);
DBMS_OUTPUT.PUT_LINE(‘Nombre: ‘ || vnombre || ‘ Salario: ‘ || vsalario);
DML-> lenguaje de actualización de datos (INSERT, UPDATE, DELETE)
Invocaciones a otros programas
Manejo de bucles y recorrido de cursores
3. EXCEPTION -> manejo y control de errores (obligatorio
WHEN NO_DATA_FOUND THEN
vsalida:= ‘NO EXISTE EL ESTUDIANTE: ‘ || varid;
DBMS_OUTPUT.PUT_LINE(‘INFO: ‘ || vsalida);
INSERT INTO TEMPORAL(columnacaracter)
VALUES(vsalida);
4. END; -> (fin de
/ todo el bloque)
BUCLES: recorridos sistemáticos con un inicio y fin, van dentro del begin
CURSORES: es un apuntador a un conjunto de filas (no almacenadas, lista de datos) que provienen
de una consulta o de una operación DML (INSERT, UPDATE, DELETE) dependen obligatoriamente
del manejo de bucles
Usarlo cuando las filas involucradas en el proceso de extracción invocadas involucran más de una
fila
TIPOS DE CURSORES:
1. IMPLICITOS -> operados por el propio sistema (DML)
ATRIBUTOS: Funciones que se invocan cuando se necesiten
SQL%FOUND: verdadero si encuentra datos
SQL%NOTFOUND: verdadero si no encuentra datos
SQL%ROWCOUNT: devuelve el numero de filas devueltas por la operación DML o
de consulta sobre el cursor
SQL%ISOPEN: verdadero si el cursor esta abierto
2. EXPLICITOS(Nominados) -> consultas del programador DB
Mismas funciones que usa los implícitos pero SQL se reemplaza por el nombre del
cursor
3. PARAMETRIZADOS -> valores que entran por teclado para que el cursor opere y despliegue
información
host
dir *.sql
sqlplus
edit nombreArchivo
@nombrearchivo
TIPOS DE BUCLES:
1. LOOP
<procesos de ejecución>;
EXIT WHEN <condición>;
END LOOP
2. WHILE <condición> LOOP
<procesos de ejecución>;
--modificación del centinela de condición
END LOOP;
3. FOR variable_autodeclarada IN (REVERSE-> si quiero inversa) Valor_1.. Valor_2 LOOP
<procesos de ejecución>;
END LOOP;
-- CONDICIONES
AND, OR, NOT
!=, <>
=,
<, <=
>, >=
IF <condición> THEN
<procesos>;
END IF;
IF <condición> THEN
<procesos>;
ELSIF <condición2> THEN
<procesos2>;
ELSIF <condición3> THEN
<procesos3>;
ELSE
<procesos4>;
END IF;