PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.

Slides:



Advertisements
Presentaciones similares
Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple Disponible en: Copyright.
Advertisements

Composición de Una Tabla de Números a Partir de Una Lista de Números Separada por Comas en Transact SQL Leonel Morales Díaz Ingeniería Simple
DECLARE CURSOR cur1 IS SELECT dnombre, loc FROM DEPART; v_nombre DEPART.DNOMBRE%TYPE; v_localidad DEPART.LOC%TYPE; BEGIN OPEN cur1; LOOP FETCH cur1 INTO.
Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título.
Insercion de datos..
Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade.
Implementación de procedimientos almacenados
Implementación de funciones definidas por el usuario
Implementación de procedimientos almacenados. Introducción a los procedimientos almacenados Creación, ejecución, modificación y eliminación de procedimientos.
Entrada y salida Fundamentos de programación/Programación I
Nombre:Nº de Control: María del Carmen Raygoza Hernández Judith Itzel Requejo Hernández
Procedimientos Almacenados y Disparadores
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Introducción al VHDL VHDL orientado a la síntesis de circuitos en Dispositivo Lógicos Programables.
SQL Base de Datos LENGUAJES DE CONSULTA AR y CR no pueden ser tomados como base para implementar porque: Poseen sintaxis compleja No permiten.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación.
Oracle y Java Continuación *
13/01/08Seminario de Bases de Datos1 Oracle y Java * * Tomado del curso de Francisco Moreno.
25/11/07Laboratorio de Bases de Datos1 PL/SQL* *Tomado del curso de Francisco Moreno.
ESTRUCTURAS DE CONTROL
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Punteros Tipo access:
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Overloading de subprogramas procedure Put(Item: in integer;
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Subprogramas –Encabezamiento –Declaraciones –Cuerpo –Encabezamiento.
Seminario de Lenguajes A – Opción Ada Estructura general de programas –Especificación de contexto –Encabezado –Declaraciones –Cuerpo Seminario de Lenguajes.
Seminario de Lenguajes A – Opción Ada
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Parámetros array ilimitados.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Bases de Datos Relacionales Preparó: Ismael Castañeda Fuentes Fuentes:Manuales Sybase Manuales SQL Server Manuales Oracle BATCHS.
BASES DE DATOS Ejercicio No. 6. Ejecutar las siguientes sentencias SELECT nombre, ueldo FROM user.tabla_profesor WHERE filtro 1 UPDATE user.tabla_profesor.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Ing. Ricardo Carlos Inquilla Quispe
Procedimientos Almacenados Funciones Agregadas
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Estructura general de un programa en el servidor de Bases de Datos.
Cifrar / Descifrar campos en SQL
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MODULA Lenguaje de Programación Anabel Martín González
5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Apuntes PL-SQL Triggers II. Tipos de datos compuestos Registros PL/SQL: Son similares a un tipo struct en C o a un tipo Registro en otros 3GL. Se componen.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
Mtr. Adrián Monge Monge Educación 2015 Maestría, Mención en Administración de Proyectos ULACITMaestría, Mención en Administración de Proyectos 2012 Licenciatura,
Implementación de funciones definidas por el usuario.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
GESTOR DE BASE DE DATOS CARRERA: COMPUTACIÓN E INFORMÁTICA CURSO: TALLER DE SISTEMAS I DOCENTE: ING. JOSÉ EDUARDO QUISPE TAIPE CICLO: QUINTO.
Administración de Sistemas Gestores de Bases de Datos.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
BASE DE DATOS IUPSM CLASE PRACTICA. PROF. ING. JOSE L GUZMAN H.
UN DISPARADOR O TRIGGER es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Es una rutina autónoma.
Oracle Pl/SQl Developer – Nivel 1
Características Objeto Relacionales en Oracle
Transcripción de la presentación:

PL/SQL Francisco Moreno Universidad Nacional

Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta se puede involucrar directamente en expresiones y en consultas SQL. Sintaxis: FUNCTION CREATE [OR REPLACE] FUNCTION nombre_función [( arg1 [modo] tipo [, arg2 [modo] tipo...])] RETURN tipo_de_dato IS Bloque de PL/SQL

Ejemplo CREATE OR REPLACE FUNCTION area_circulo(radio IN NUMBER) RETURN NUMBER IS pi CONSTANT NUMBER(5,4) := ; BEGIN RETURN (radio * radio * pi); END; / Invocación en SQL*Plus: VAR a NUMBER; EXECUTE :a := area_circulo(3); PRINT a;

Recursividad CREATE OR REPLACE FUNCTION sumadigit(n IN NUMBER) RETURN NUMBER IS suma NUMBER(3); tamano NUMBER(38); BEGIN suma := SUBSTR(n,1,1); tamano := LENGTH(n); IF tamano > 1 THEN suma := suma + sumadigit(SUBSTR(n,2,tamano)); END IF; RETURN suma; EXCEPTION WHEN OTHERS THEN RETURN 0; END; / Límite: 38 dígitos (NUMBER) Ejercicio: pulir para decimales y negativos.

Invocación de la función desde una consulta: CREATE TABLE numero( num NUMBER(30) PRIMARY KEY); INSERT INTO numero VALUES(1); INSERT INTO numero VALUES(111); INSERT INTO numero VALUES( ); SELECT num, sumadigit(num) AS sumin FROM numero;

Otro ejemplo: ¡un programa que crea otros programas!Elaborar una función llamada crea_sub que recibe como parámetro el código fuente de un subprograma (en una cadena de caracteres) y lo crea (o lo remplaza si ya existía). Es decir, ¡un programa que crea otros programas! La función retorna Creación exitosa si no hubo problemas en la creación del subprograma o el mensaje de error de lo contrario.

CREATE OR REPLACE … END; El usuario ingresa en un campo de texto el código del programa que desea crear Se le envía la cadena de texto con el código fuente a la función crea_sub crea_sub recibe el código fuente y crea el programa que el usuario desea

CREATE OR REPLACE FUNCTION crea_sub(codigo_fuente IN VARCHAR) RETURN VARCHAR IS BEGIN EXECUTE IMMEDIATE codigo_fuente; RETURN 'Creación exitosa'; EXCEPTION WHEN OTHERS THEN RETURN 'Error mortal: ' || SQLERRM; --Hubo errores END; /

Ejemplo de invocación: BEGIN DBMS_OUTPUT.PUT_LINE(crea_sub('CREATE OR REPLACE FUNCTION hoy RETURN DATE IS BEGIN RETURN SYSDATE; END;')); END; / El código en verde sería el que el usuario ingresaría a través de una interfaz en un campo de texto. Más adelante en el curso se verá como hacerlo, por ejemplo, desde Java.

Paquetes Un paquete es una agrupación de funciones, procedimientos y variables. Clasifican los subprogramas de acuerdo con una categoría elegida por el programador o diseñador Un paquete se compone de dos partes: –Especificación Definiciones de variables públicas y prototipos de los subprogramas –Cuerpo (BODY) Implementación de los subprogramas declarados en la especificación más subprogramas y variables privadas

CREATE PACKAGE nom_paquete IS -- Variables públicas -- Declaración de subprogramas (públicos) END; / BODY CREATE PACKAGE BODY nom_paquete IS -- Variables privadas /* Implementación de subprogramas privados */ /* Implementación de subprogramas declarados en la especificación */ END; / SintaxisESPECFICACIÓN CUERPO Los subprogramas privados se deben implementar antes que los públicos

Ejemplo: Especificación CREATE OR REPLACE PACKAGE mat IS TYPE t_num IS TABLE OF NUMBER(3) INDEX BY BINARY_INTEGER; PROCEDURE mulvec(vec IN OUT t_num); FUNCTION cadvalores(vec IN t_num) RETURN VARCHAR; END; --Fin de la especificación /

Ejemplo: Cuerpo CREATE OR REPLACE PACKAGE BODY mat IS PROCEDURE mulvec(vec IN OUT t_num) IS i NUMBER := vec.FIRST; BEGIN WHILE i IS NOT NULL LOOP vec(i) := vec(i) * i; i := vec.NEXT(i); END LOOP; END; Continúa

Cont. cuerpo FUNCTION cadvalores(vec IN t_num) RETURN VARCHAR IS k NUMBER; cad VARCHAR(2000); BEGIN k := vec.FIRST; WHILE k IS NOT NULL LOOP cad := cad || ' ' || vec(k); k := vec.NEXT(k); END LOOP; RETURN cad; END; END; --Fin del cuerpo del paquete /

DECLARE mi_vec mat.t_num; k NUMBER; BEGIN mi_vec(1):= 5; mi_vec(2):= 10; mi_vec(3):= 80; DBMS_OUTPUT.PUT_LINE(mat.cadvalores(mi_ve c)); mat.mulvec(mi_vec); DBMS_OUTPUT.PUT_LINE(mat.cadvalores(mi_ve c)); END; /