Procedimientos Almacenados Oracle SQL
Procedimientos Almacenados Oracle SQL
Procedimientos Almacenados
Subprogramas
Bloques anónimos vs Subprogramas
Bloque anónimo Subprogramas
Bloques de código sin nombre Bloques de código con nombre
Se compilan cada vez que se ejecutan Se compilan solo una vez
No se almacenan en la base de datos Se almacenan en la base de datos
No pueden ser invocados por otras aplicaciones Al tener nombre pueden ser invocados por otras
aplicaciones
No devuelven valores Las funciones devuelven valores
No pueden recibir parámetros Pueden recibir parámetros
Bloque Anónimo
SET serveroutput ON;
DECLARE
v_ciudad VARCHAR2(20) := '';
BEGIN
SELECT ciudad_cliente INTO v_ciudad
FROM cliente
WHERE nombre_cliente = 'Santos';
dbms_output.put_line (v_ciudad);
--step 1 --step 1
VAR c1 REFCURSOR;
EXEC cuentas_mayores_sp('C-102', :c1); VAR c3 REFCURSOR;
BEGIN
--step 2 cuentas_mayores_sp('C-102', :c3);
PRINT c1; END;
/
--step 2
PRINT c3;
Función - Creación
--sintáxis
CREATE OR REPLACE FUNCTION <nombre_funcion>
[(argumento1 [modo] <tipo_de_dato>,
argumento2 [modo] <tipo_de_dato>,
...)]
RETURN <tipo_de_dato>
IS | AS
<cuerpo_funcion> --bloque PL/SQL*
BEGIN
IF valida_cuenta ('C-333') THEN
DBMS_OUTPUT.put_line ('Cuenta válida');
ELSE
DBMS_OUTPUT.put_line ('Cuenta por debajo del promedio!!');
END IF;
END;
/
• Cursores
Abstracción de datos
• %ROWTYPE. Tipo de registro asociado a alguna
relación en la base de datos.
• Tipos de datos abstractos (ADT). Consisten de una
estructura (atributos) y programas que manipulan los
datos. Pueden ser almacenados en tablas y son la base
de la orientación a objetos en el modelo relacional.
Variables
compuestas:
colecciones
Ejemplo %ROWTYPE
DESC employees;
DECLARE
regEmp employees%ROWTYPE;
v_income employees.salary%TYPE;
BEGIN
regEmp.first_name := 'Alberto';
DBMS_OUTPUT.Put_Line(regEmp.first_name);
v_income := 9500;
DBMS_OUTPUT.Put_Line(v_income);
END;
Cursores
--sintáxis Cursor Explicito
• Puntero a un área privada de memoria. CURSOR <nombre_cursor> IS
<sentencia_SELECT>;
• Utilizada para manipular el resultado de
un SELECT. --ejemplo
DECLARE
• Pueden ser implícitos o explícitos. CURSOR cur_cuentas IS
SELECT nombre_sucursal, saldo
FROM cuenta;
Cursores - Ejemplo
--ejemplo
DECLARE
v_nombre_sucursal VARCHAR2(30);
v_saldo NUMBER(10);
CURSOR cur_cuentas IS
SELECT nombre_sucursal, saldo
Cursor FROM cuenta;
BEGIN
OPEN cur_cuentas; --apertura