SlideShare una empresa de Scribd logo
1 de 6
/*
Sesión10 – Funciones y Procedimiento
Estudiante: José Luis Toro Alcarraz
Curso: Base de Datos Avanzado II
Correo:i201010865@cibertec.edu.pe
*/
Objetivos de la sesión.



Crear e invocar funciones propias con PL/SQL.
Crear e invocar procedimientos con PL/SQL.

1) Creación de funciones y procedimientos.
2) Subprogramas locales.
3) Programas almacenados y el diccionario de datos.
1) Creación de funciones y procedimientos.
a) Tipos de bloques
Existen dos tipos principales de bloques PL/SQL, anónimos y nominados.




Los bloques anónimos, que empiezan con DECLARE o BEGIN, se compilan cada vez que
se ejecutan, no se almacenan en la base de datos y no pueden llamarse directamente
desde otros bloques PL/SQL.
Los bloques nominados se pueden almacenar en la base de datos, pueden ser ejecutados
cuando sea conveniente y ser invocados desde otros bloques PL/SQL. Ejemplo
Funciones, procedimientos, paquetes y disparadores.

b) Procedimiento y funciones




Los procedimientos y funciones PL/SQL se comportan de forma muy parecida a los
procedimientos y funciones de otros lenguajes de tercera generación, compartiendo
muchas de sus propiedades.
Los procedimientos y funciones también se conocen con el nombre de subprogramas.

c) Procedimientos




En primer lugar creamos el procedimiento con la instrucción CREATE OR REPLACE
PROCEDURE
En la llamada al procedimiento le pasamos un parámetro, en el caso del ejemplo es un
mensaje.
Un subprograma es un bloque PL/SQL con una sección declarativa, una sección ejecutable
y una sección de tratamiento de errores, donde únicamente la sección ejecutable es
obligatoria.


Sintaxis
CREATE [OR REPLACE] PROCEDURE

Explicación
 nombre_procedimiento : Es el
nombre_procedimiento
[(argumento [IN|OUT |INOUT ] tipo
....
[(argumento [IN|OUT |INOUT ] tipo) ]
{IS |AS} Cuerpo_procedimiento;





nombre del procedimiento que se
quiere crear.
argumento : Es el nombre de un
parámetro del procedimiento.
tipo : Es el tipo del parámetro.
cuerpo_procedimiento : Es un bloque
PL/SQL que constituye el código del
procedimiento.

Ejemplo1:
SQL> -- CREACIÓN
CREATE OR REPLACE PROCEDURE SP_IMPRIME (MENSAJE VARCHAR2)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE(MENSAJE);
END;
/
Procedimiento creado.
Procedimiento PL/SQL terminado correctamente.
SQL> -- LLAMADA AL SUB-PROGRAMA
BEGIN
SP_IMPRIME ('Este es mi primer procedimiento');
END;
/
Este es mi primer procedimiento
Procedimiento PL/SQL terminado correctamente.
Ejemplo2:
SQL> -- CREAMOS UNA SECUENCIA
CREATE SEQUENCE SEQ_DEPT
START WITH 50
INCREMENT BY 10;
Secuencia creada.
SQL> -- PROCEDIMIENTO QUE INSERTA UN NUEVO DEPARTAMENTO
CREATE OR REPLACE PROCEDURE SP_INSERTA_DEPT
(V_DNAME DEPT.DNAME%TYPE,V_LOC DEPT.LOC%TYPE)
AS
-- Sección declarativa
V_DEPTNO DEPT.DEPTNO%TYPE;
-- Sección Ejecutable
BEGIN
SELECT SEQ_DEPT.NEXTVAL INTO V_DEPTNO
FROM DUAL;
INSERT INTO DEPT(DEPTNO,DNAME,LOC)
VALUES(V_DEPTNO,V_DNAME,V_LOC);
COMMIT;
-- Sección de excepciones
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('Ya existe un departamento con el código generado');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error desconocido');
END;
/
Procedimiento creado.
SQL> -- LLAMAMOS AL SUBPROGRAMA
BEGIN
SP_INSERTA_DEPT('José','Lima');
END;
/
Procedimiento PL/SQL terminado correctamente.
SQL> -- COMPROBAMOS
SELECT * FROM DEPT;
DEPTNO DNAME
LOC
---------- -------------- ------------50 José
Lima
10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
d) Funciones
Sintaxis
CREATE [OR REPLACE] FUNCTION
nombre_función
[(argumento [IN|OUT |INOUT ] tipo
....
[(argumento [IN|OUT |INOUT ] tipo) ]
RETURN tipo_retorno
{IS |AS} Cuerpo_función;

Explicación
 nombre_función : Es el nombre de la
función que se quiere crear.
 argumento : Es el nombre de un
parámetro de la función.
 tipo : Es el tipo del parámetro.
 tipo_retorno : Es el tipo del valor que
devuelve la función.
 cuerpo_función : Es un bloque
PL/SQL que constituye el código de la
función.

Dentro del cuerpo de una función, la instrucción RETURN, se utiliza para devolver el control, junto
con un valor, al entorno que realizó la llamada.
Sintaxis:
RETURN expresión;
Ejemplo:
SQL> -- FUNCIÓN QUE DEVUELVA EL NÚMERO DE EMPLEADOS POR DEPARTAMENTO
CREATE OR REPLACE FUNCTION SF_NUMERO_EMP
(V_DEPTNO DEPT.DEPTNO%TYPE)
RETURN NUMBER
AS
V_NUMERO NUMBER(6);
BEGIN
SELECT COUNT(1) INTO V_NUMERO
FROM EMP
WHERE DEPTNO = V_DEPTNO;
RETURN V_NUMERO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR INESPERADO. ' || SQLERRM);
RETURN -1;
END;
/
Funci¾n creada.
SQL> -- LLAMAMOS A LA FUNCIÓN A TRAVÉS DE UNA CONSULTA
SELECT DEPTNO,DNAME, SF_NUMERO_EMP(DEPTNO) FROM DEPT;
DEPTNO
--------50
10
20
30
40

DNAME
SF_NUMERO_EMP(DEPTNO)
---------------------------------José
0
ACCOUNTING
4
RESEARCH
0
SALES
10
OPERATIONS
0

d) Eliminación de sub-programas
Eliminación de procedimientos:
DROP PROCEDURE nombre_procedimiento;
Eliminación de funciones:
DROP FUNCTION nombre_función;
e) Métodos de los parámetros
IN
Pasa un valor al subprograma

OUT
Retorna una valor a quien

IN OUT
Pasa un valor al subprograma
Puede ser una constante o
variable

invoca el subprograma
Debe ser una variable

y retorna el valor actualizado
Debe ser una variable

Nota: Los procedimientos se utilizan para procesar mientras que las funciones para consultar y
devolver un valor.
2) Subprogramas locales.



Los subprogramas locales no crean un objeto en la base de datos, solo tienen vigencia
durante la ejecución del programa o subprograma que los crea e invoca.
Los subprogramas locales deben ser declarados al final de la sección declarativa.

Ejemplo:
DECLARE
CURSOR C_EMPS IS
SELECT ENAME, JOB FROM EMP;
V_SALIDA_FORMATEADA VARCHAR2(50);
-- Función que devolverá el nombre y job concatenados y separados por espacio
FUNCTION FORMATEADOR (P_ENAME IN VARCHAR2, P_JOB IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
RETURN P_ENAME ||’ ‘|| P_JOB;
END FORMATEADOR;
BEGIN
FOR V_EMP_RECORD IN C_EMPS LOOP
V_SALIDA_FORMATEADA := FORMATEADOR(V_EMP_RECORD.ENAME,
V_EMP_RECORD.JOB);
DBMS_OUTPUT.PUT_LINE(V_SALIDA_FORMATEADA);
END LOOP;
END;
/
3) Programas almacenados y el diccionario de datos.


La vista del diccionario de datos que contiene el código de un procedimiento o de una
función es la vista ALL_SOURCE.

Problema1: Cree un procedimiento que inserta un Nuevo departamento y que devuelva el código
del departamento ingresado y el resultado.
-- Procedimiento que inserta un nuevo departamento.
CREATE OR REPLACE PROCEDURE SP_INSERTA_DEPT
(V_DNAME DEPT.DNAME%TYPE, V_LOC DEPT.LOC%TYPE, V_RESULTADO OUT
VARCHAR2)
AS
V_DEPTNO DEPT.DEPTNO%TYPE;
BEGIN
SELECT SEQ_DEPT.NEXTVAL INTO V_DEPTNO FROM DUAL;
INSERT INTO DEPT
VALUES(V_DEPTNO, V_DNAME, V_LOC);
V_RESULTADO:='Departamento ' || V_DEPTNO || ' se grabó correctamente.';
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
V_RESULTADO:='Ya existe un departamento con el código generado.';
v_DEPTNO:=-1;
WHEN OTHERS THEN
V_RESULTADO:='Error desconocido ' || SQLERRM;
v_DEPTNO:=-2;
END;
/
-- Llamar al subprograma
DECLARE
V_RESULTADO VARCHAR(100);
BEGIN
DBMS_OUTPUT.PUT_LINE(V_RESULTADO);
SP_INSERTA_DEPT('FINANZAS','SAN LUIS',V_RESULTADO);
END;
/
Problema2: Cree una función que retorne el total de ventas por empleado en un determinado
rango de fechas y ordenado, luego llame a la función en una consulta.
-- Función que retorna total de ventas por empleados
CREATE OR REPLACE FUNCTION SF_VENTAS_EMP
(V_EMPNO EMP.EMPNO%TYPE, V_FECHA1 DATE, V_FECHA2 DATE)
RETURN NUMBER
IS
V_TOT NUMBER(8,2);
BEGIN
SELECT SUM(TOTAL) INTO V_TOT
FROM ORD
WHERE EMPNO=V_EMPNO AND ORDERDATE BETWEEN V_FECHA1 AND V_FECHA2
ORDER BY 3 DESC;
RETURN V_TOT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR INESPERADO.' || SQLERRM);
RETURN –1;
END;
/
-- Llamar al subprograma
SELECT EMPNO,ENAME,SF_VENTAS_EMP(EMPNO) FROM EMP;

Más contenido relacionado

La actualidad más candente

Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)José Toro
 
Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)José Toro
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)José Toro
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracleluisguil
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sqlDeisyVilchez
 
Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)José Toro
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM Kamisutra
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)José Toro
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadoresPablo Jose
 
Disparadores
DisparadoresDisparadores
DisparadoresZiscko
 

La actualidad más candente (19)

Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
 
Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)
 
7.1. procedimientos almacenados
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)
 
Cap I Plsql
Cap I PlsqlCap I Plsql
Cap I Plsql
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Lumisaca hector bdii_t7
Lumisaca hector bdii_t7Lumisaca hector bdii_t7
Lumisaca hector bdii_t7
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
Funciones
FuncionesFunciones
Funciones
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
Disparadores
DisparadoresDisparadores
Disparadores
 

Destacado

Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)José Toro
 
Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)José Toro
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenadosiluijo
 
Presentació 22@Barcelona, El districte de la Innovació
Presentació 22@Barcelona, El districte de la InnovacióPresentació 22@Barcelona, El districte de la Innovació
Presentació 22@Barcelona, El districte de la Innovació22arrobabcn
 
CiU denuncia l’increment desmesurat de personal del Govern Tripartit
CiU denuncia l’increment desmesurat de personal del Govern TripartitCiU denuncia l’increment desmesurat de personal del Govern Tripartit
CiU denuncia l’increment desmesurat de personal del Govern TripartitConvergència i Unió
 
Unitat 6.- Tipus de Mercat
Unitat 6.- Tipus de MercatUnitat 6.- Tipus de Mercat
Unitat 6.- Tipus de Mercatiesriberadelsio
 
Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2mtemarialuisa
 
NATURA SOCIETAT: HARMONIES, CRISIS I IMPACTES
NATURA  SOCIETAT: HARMONIES, CRISIS I IMPACTESNATURA  SOCIETAT: HARMONIES, CRISIS I IMPACTES
NATURA SOCIETAT: HARMONIES, CRISIS I IMPACTESlocoserrallo
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos AlmacenadosRafa
 
Imperialisme Colonialisme
Imperialisme ColonialismeImperialisme Colonialisme
Imperialisme Colonialismejestiarte
 
Java Concurrency Idioms
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency IdiomsAlex Miller
 
La gestion de projet Agile
La gestion de projet AgileLa gestion de projet Agile
La gestion de projet AgileJonathan Roy
 
Disruptor tools in action
Disruptor   tools in actionDisruptor   tools in action
Disruptor tools in actionMichael Barker
 
Intro to scaling Databases
Intro to scaling DatabasesIntro to scaling Databases
Intro to scaling DatabasesHeiko Seebach
 
The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly languagehemant meena
 

Destacado (20)

Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)
 
Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Sql procedimientos-almacenados
Sql procedimientos-almacenadosSql procedimientos-almacenados
Sql procedimientos-almacenados
 
Presentació 22@Barcelona, El districte de la Innovació
Presentació 22@Barcelona, El districte de la InnovacióPresentació 22@Barcelona, El districte de la Innovació
Presentació 22@Barcelona, El districte de la Innovació
 
CiU denuncia l’increment desmesurat de personal del Govern Tripartit
CiU denuncia l’increment desmesurat de personal del Govern TripartitCiU denuncia l’increment desmesurat de personal del Govern Tripartit
CiU denuncia l’increment desmesurat de personal del Govern Tripartit
 
Symfony Parte 2
Symfony Parte 2Symfony Parte 2
Symfony Parte 2
 
la embrilogia
la embrilogiala embrilogia
la embrilogia
 
Unitat 6.- Tipus de Mercat
Unitat 6.- Tipus de MercatUnitat 6.- Tipus de Mercat
Unitat 6.- Tipus de Mercat
 
Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2
 
NATURA SOCIETAT: HARMONIES, CRISIS I IMPACTES
NATURA  SOCIETAT: HARMONIES, CRISIS I IMPACTESNATURA  SOCIETAT: HARMONIES, CRISIS I IMPACTES
NATURA SOCIETAT: HARMONIES, CRISIS I IMPACTES
 
Pla ferroviari
Pla ferroviariPla ferroviari
Pla ferroviari
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Imperialisme Colonialisme
Imperialisme ColonialismeImperialisme Colonialisme
Imperialisme Colonialisme
 
Java Concurrency Idioms
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency Idioms
 
La gestion de projet Agile
La gestion de projet AgileLa gestion de projet Agile
La gestion de projet Agile
 
Disruptor tools in action
Disruptor   tools in actionDisruptor   tools in action
Disruptor tools in action
 
Trial set
Trial setTrial set
Trial set
 
Intro to scaling Databases
Intro to scaling DatabasesIntro to scaling Databases
Intro to scaling Databases
 
The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly language
 

Similar a Sesion10 - Funciones y procedimientos (Oracle)

Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggersLuis Jherry
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggersLuis Jherry
 
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdf
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdfUF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdf
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdfRAULSalgadoVilas1
 
Programación Modular
Programación ModularProgramación Modular
Programación Modularlisbeca
 
Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenadoshirmaroxana13
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosJosé Antonio Sandoval Acosta
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenadosHarold Perez
 
6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mv6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mvEcler Mamani Vilca
 
Estructuras basicas
Estructuras basicasEstructuras basicas
Estructuras basicasjuandavid846
 
Visual basic
Visual basicVisual basic
Visual basicmellcv
 
11 Guía_Fundamentos de Base de Datos.docx
11 Guía_Fundamentos de Base de Datos.docx11 Guía_Fundamentos de Base de Datos.docx
11 Guía_Fundamentos de Base de Datos.docxLeydyVeronicaDelgado
 

Similar a Sesion10 - Funciones y procedimientos (Oracle) (20)

Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Anexo1
Anexo1Anexo1
Anexo1
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdf
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdfUF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdf
UF7-PROGRAMACIÓN AVANZADA DE ACCESO A DATOS.pdf
 
Programación Modular
Programación ModularProgramación Modular
Programación Modular
 
preparedstatement
preparedstatementpreparedstatement
preparedstatement
 
03 funciones
03 funciones03 funciones
03 funciones
 
Ms SQL Server
Ms SQL ServerMs SQL Server
Ms SQL Server
 
PL/SQL
PL/SQLPL/SQL
PL/SQL
 
Bloques
BloquesBloques
Bloques
 
Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenados
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datos
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mv6 libro fundamentos cap__modularidad_ecler mv
6 libro fundamentos cap__modularidad_ecler mv
 
Estructuras basicas
Estructuras basicasEstructuras basicas
Estructuras basicas
 
Visual basic
Visual basicVisual basic
Visual basic
 
11 Guía_Fundamentos de Base de Datos.docx
11 Guía_Fundamentos de Base de Datos.docx11 Guía_Fundamentos de Base de Datos.docx
11 Guía_Fundamentos de Base de Datos.docx
 
SISTEMAS
SISTEMASSISTEMAS
SISTEMAS
 

Último

origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptNancyMoreiraMora1
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOluismii249
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfGruberACaraballo
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxNadiaMartnez11
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxpvtablets2023
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfJonathanCovena1
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptxRigoTito
 

Último (20)

origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 

Sesion10 - Funciones y procedimientos (Oracle)

  • 1. /* Sesión10 – Funciones y Procedimiento Estudiante: José Luis Toro Alcarraz Curso: Base de Datos Avanzado II Correo:i201010865@cibertec.edu.pe */ Objetivos de la sesión.   Crear e invocar funciones propias con PL/SQL. Crear e invocar procedimientos con PL/SQL. 1) Creación de funciones y procedimientos. 2) Subprogramas locales. 3) Programas almacenados y el diccionario de datos. 1) Creación de funciones y procedimientos. a) Tipos de bloques Existen dos tipos principales de bloques PL/SQL, anónimos y nominados.   Los bloques anónimos, que empiezan con DECLARE o BEGIN, se compilan cada vez que se ejecutan, no se almacenan en la base de datos y no pueden llamarse directamente desde otros bloques PL/SQL. Los bloques nominados se pueden almacenar en la base de datos, pueden ser ejecutados cuando sea conveniente y ser invocados desde otros bloques PL/SQL. Ejemplo Funciones, procedimientos, paquetes y disparadores. b) Procedimiento y funciones   Los procedimientos y funciones PL/SQL se comportan de forma muy parecida a los procedimientos y funciones de otros lenguajes de tercera generación, compartiendo muchas de sus propiedades. Los procedimientos y funciones también se conocen con el nombre de subprogramas. c) Procedimientos    En primer lugar creamos el procedimiento con la instrucción CREATE OR REPLACE PROCEDURE En la llamada al procedimiento le pasamos un parámetro, en el caso del ejemplo es un mensaje. Un subprograma es un bloque PL/SQL con una sección declarativa, una sección ejecutable y una sección de tratamiento de errores, donde únicamente la sección ejecutable es obligatoria.  Sintaxis CREATE [OR REPLACE] PROCEDURE Explicación  nombre_procedimiento : Es el
  • 2. nombre_procedimiento [(argumento [IN|OUT |INOUT ] tipo .... [(argumento [IN|OUT |INOUT ] tipo) ] {IS |AS} Cuerpo_procedimiento;    nombre del procedimiento que se quiere crear. argumento : Es el nombre de un parámetro del procedimiento. tipo : Es el tipo del parámetro. cuerpo_procedimiento : Es un bloque PL/SQL que constituye el código del procedimiento. Ejemplo1: SQL> -- CREACIÓN CREATE OR REPLACE PROCEDURE SP_IMPRIME (MENSAJE VARCHAR2) AS BEGIN DBMS_OUTPUT.PUT_LINE(MENSAJE); END; / Procedimiento creado. Procedimiento PL/SQL terminado correctamente. SQL> -- LLAMADA AL SUB-PROGRAMA BEGIN SP_IMPRIME ('Este es mi primer procedimiento'); END; / Este es mi primer procedimiento Procedimiento PL/SQL terminado correctamente. Ejemplo2: SQL> -- CREAMOS UNA SECUENCIA CREATE SEQUENCE SEQ_DEPT START WITH 50 INCREMENT BY 10; Secuencia creada. SQL> -- PROCEDIMIENTO QUE INSERTA UN NUEVO DEPARTAMENTO CREATE OR REPLACE PROCEDURE SP_INSERTA_DEPT (V_DNAME DEPT.DNAME%TYPE,V_LOC DEPT.LOC%TYPE) AS -- Sección declarativa V_DEPTNO DEPT.DEPTNO%TYPE; -- Sección Ejecutable BEGIN SELECT SEQ_DEPT.NEXTVAL INTO V_DEPTNO FROM DUAL;
  • 3. INSERT INTO DEPT(DEPTNO,DNAME,LOC) VALUES(V_DEPTNO,V_DNAME,V_LOC); COMMIT; -- Sección de excepciones EXCEPTION WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('Ya existe un departamento con el código generado'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error desconocido'); END; / Procedimiento creado. SQL> -- LLAMAMOS AL SUBPROGRAMA BEGIN SP_INSERTA_DEPT('José','Lima'); END; / Procedimiento PL/SQL terminado correctamente. SQL> -- COMPROBAMOS SELECT * FROM DEPT; DEPTNO DNAME LOC ---------- -------------- ------------50 José Lima 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON d) Funciones Sintaxis CREATE [OR REPLACE] FUNCTION nombre_función [(argumento [IN|OUT |INOUT ] tipo .... [(argumento [IN|OUT |INOUT ] tipo) ] RETURN tipo_retorno {IS |AS} Cuerpo_función; Explicación  nombre_función : Es el nombre de la función que se quiere crear.  argumento : Es el nombre de un parámetro de la función.  tipo : Es el tipo del parámetro.  tipo_retorno : Es el tipo del valor que devuelve la función.  cuerpo_función : Es un bloque PL/SQL que constituye el código de la función. Dentro del cuerpo de una función, la instrucción RETURN, se utiliza para devolver el control, junto con un valor, al entorno que realizó la llamada.
  • 4. Sintaxis: RETURN expresión; Ejemplo: SQL> -- FUNCIÓN QUE DEVUELVA EL NÚMERO DE EMPLEADOS POR DEPARTAMENTO CREATE OR REPLACE FUNCTION SF_NUMERO_EMP (V_DEPTNO DEPT.DEPTNO%TYPE) RETURN NUMBER AS V_NUMERO NUMBER(6); BEGIN SELECT COUNT(1) INTO V_NUMERO FROM EMP WHERE DEPTNO = V_DEPTNO; RETURN V_NUMERO; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR INESPERADO. ' || SQLERRM); RETURN -1; END; / Funci¾n creada. SQL> -- LLAMAMOS A LA FUNCIÓN A TRAVÉS DE UNA CONSULTA SELECT DEPTNO,DNAME, SF_NUMERO_EMP(DEPTNO) FROM DEPT; DEPTNO --------50 10 20 30 40 DNAME SF_NUMERO_EMP(DEPTNO) ---------------------------------José 0 ACCOUNTING 4 RESEARCH 0 SALES 10 OPERATIONS 0 d) Eliminación de sub-programas Eliminación de procedimientos: DROP PROCEDURE nombre_procedimiento; Eliminación de funciones: DROP FUNCTION nombre_función; e) Métodos de los parámetros IN Pasa un valor al subprograma OUT Retorna una valor a quien IN OUT Pasa un valor al subprograma
  • 5. Puede ser una constante o variable invoca el subprograma Debe ser una variable y retorna el valor actualizado Debe ser una variable Nota: Los procedimientos se utilizan para procesar mientras que las funciones para consultar y devolver un valor. 2) Subprogramas locales.   Los subprogramas locales no crean un objeto en la base de datos, solo tienen vigencia durante la ejecución del programa o subprograma que los crea e invoca. Los subprogramas locales deben ser declarados al final de la sección declarativa. Ejemplo: DECLARE CURSOR C_EMPS IS SELECT ENAME, JOB FROM EMP; V_SALIDA_FORMATEADA VARCHAR2(50); -- Función que devolverá el nombre y job concatenados y separados por espacio FUNCTION FORMATEADOR (P_ENAME IN VARCHAR2, P_JOB IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN P_ENAME ||’ ‘|| P_JOB; END FORMATEADOR; BEGIN FOR V_EMP_RECORD IN C_EMPS LOOP V_SALIDA_FORMATEADA := FORMATEADOR(V_EMP_RECORD.ENAME, V_EMP_RECORD.JOB); DBMS_OUTPUT.PUT_LINE(V_SALIDA_FORMATEADA); END LOOP; END; / 3) Programas almacenados y el diccionario de datos.  La vista del diccionario de datos que contiene el código de un procedimiento o de una función es la vista ALL_SOURCE. Problema1: Cree un procedimiento que inserta un Nuevo departamento y que devuelva el código del departamento ingresado y el resultado. -- Procedimiento que inserta un nuevo departamento. CREATE OR REPLACE PROCEDURE SP_INSERTA_DEPT (V_DNAME DEPT.DNAME%TYPE, V_LOC DEPT.LOC%TYPE, V_RESULTADO OUT VARCHAR2) AS V_DEPTNO DEPT.DEPTNO%TYPE;
  • 6. BEGIN SELECT SEQ_DEPT.NEXTVAL INTO V_DEPTNO FROM DUAL; INSERT INTO DEPT VALUES(V_DEPTNO, V_DNAME, V_LOC); V_RESULTADO:='Departamento ' || V_DEPTNO || ' se grabó correctamente.'; COMMIT; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN V_RESULTADO:='Ya existe un departamento con el código generado.'; v_DEPTNO:=-1; WHEN OTHERS THEN V_RESULTADO:='Error desconocido ' || SQLERRM; v_DEPTNO:=-2; END; / -- Llamar al subprograma DECLARE V_RESULTADO VARCHAR(100); BEGIN DBMS_OUTPUT.PUT_LINE(V_RESULTADO); SP_INSERTA_DEPT('FINANZAS','SAN LUIS',V_RESULTADO); END; / Problema2: Cree una función que retorne el total de ventas por empleado en un determinado rango de fechas y ordenado, luego llame a la función en una consulta. -- Función que retorna total de ventas por empleados CREATE OR REPLACE FUNCTION SF_VENTAS_EMP (V_EMPNO EMP.EMPNO%TYPE, V_FECHA1 DATE, V_FECHA2 DATE) RETURN NUMBER IS V_TOT NUMBER(8,2); BEGIN SELECT SUM(TOTAL) INTO V_TOT FROM ORD WHERE EMPNO=V_EMPNO AND ORDERDATE BETWEEN V_FECHA1 AND V_FECHA2 ORDER BY 3 DESC; RETURN V_TOT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR INESPERADO.' || SQLERRM); RETURN –1; END; / -- Llamar al subprograma SELECT EMPNO,ENAME,SF_VENTAS_EMP(EMPNO) FROM EMP;