Sesion10 - Funciones y procedimientos (Oracle)José Toro
Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases.
UNIDAD 5. Programación Avanzada en ORACLE
Logro de la Unidad de Aprendizaje
Al término de la unidad, el alumno construye programas avanzados utilizando el lenguaje PL/SQL que soporten la lógica de negocio mediante la incorporación de funciones y procedimientos almacenados organizados en paquetes y a través de disparadores almacenados en la base de datos.
Temario
5.1. Tema 5: Programación dentro de una base de datos Oracle
5.1.1. Construcción de procedimientos y funciones almacenados.
5.1.2. Construcción de paquetes almacenados
5.1.3. Construcción de disparadores
Sesion10 - Funciones y procedimientos (Oracle)José Toro
Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases.
UNIDAD 5. Programación Avanzada en ORACLE
Logro de la Unidad de Aprendizaje
Al término de la unidad, el alumno construye programas avanzados utilizando el lenguaje PL/SQL que soporten la lógica de negocio mediante la incorporación de funciones y procedimientos almacenados organizados en paquetes y a través de disparadores almacenados en la base de datos.
Temario
5.1. Tema 5: Programación dentro de una base de datos Oracle
5.1.1. Construcción de procedimientos y funciones almacenados.
5.1.2. Construcción de paquetes almacenados
5.1.3. Construcción de disparadores
Se describen tres delitos informáticos (propiedad intelectual, estafa y extorsión) y se identifica los artículos del código penal español relacionados con el delito.
Objetivos del curso de Oracle11g de CLEFormación:
·Conocer los conceptos avanzadas funcionalidades del lenguaje PL/SQL.
·Adquirir los conocimientos necesarios para el desarrollo de aplicaciones con PL/SQL avanzadas.
Dirigido:
·Profesionales y técnicos de informática que conozcan el lenguaje SQL y PLSQL que quieran ampliar conocimientos en este lenguaje.
Requisitos iniciales:
·Conocimientos del lenguaje SQL y fundamentos de la programación PLSQL.
Más información en: http://www.cleformacion.com/es/servicios/formacion/oracle/ORN-1105
Antes de comenzar a elaborar el pliego de especificaciones técnicas, cada grupo debe tener claro el tipo de administración “para la que está trabajando” y que, por tanto, va a realizar la licitación. Para realizar este análisis inicial deberían plantearse las siguientes cuestiones:
• Nombre de la entidad
• Tipo de entidad y finalidad u objetivos de la misma
• Sistema de información involucrado
• ¿De qué personal dispone actualmente la entidad?
• ¿Cuáles son las necesidades actuales y por qué necesita contratar el servicio?
Respondiendo a este conjunto de cuestiones habremos definido claramente cómo es la entidad que va a realizar la contratación y cuál es el objeto del contrato que se desea celebrar.
Durante el período citado se sucedieron tres presidencias radicales a cargo de Hipólito Yrigoyen (1916-1922),
Marcelo T. de Alvear (1922-1928) y la segunda presidencia de Yrigoyen, a partir de 1928 la cual fue
interrumpida por el golpe de estado de 1930. Entre 1916 y 1922, el primer gobierno radical enfrentó el
desafío que significaba gobernar respetando las reglas del juego democrático e impulsando, al mismo
tiempo, las medidas que aseguraran la concreción de los intereses de los diferentes grupos sociales que
habían apoyado al radicalismo.
Elites municipales y propiedades rurales: algunos ejemplos en territorio vascónJavier Andreu
Material de apoyo a la conferencia pórtico de la XIX Semana Romana de Cascante celebrada en Cascante (Navarra), el 24 de junio de 2024 en el marco del ciclo de conferencias "De re rustica. El campo y la agricultura en época romana: poblamiento, producción, consumo"
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...JAVIER SOLIS NOYOLA
El Mtro. JAVIER SOLIS NOYOLA crea y desarrolla el “ROMPECABEZAS DE ECUACIONES DE 1ER. GRADO OLIMPIADA DE PARÍS 2024”. Esta actividad de aprendizaje propone retos de cálculo algebraico mediante ecuaciones de 1er. grado, y viso-espacialidad, lo cual dará la oportunidad de formar un rompecabezas. La intención didáctica de esta actividad de aprendizaje es, promover los pensamientos lógicos (convergente) y creativo (divergente o lateral), mediante modelos mentales de: atención, memoria, imaginación, percepción (Geométrica y conceptual), perspicacia, inferencia, viso-espacialidad. Esta actividad de aprendizaje es de enfoques lúdico y transversal, ya que integra diversas áreas del conocimiento, entre ellas: matemático, artístico, lenguaje, historia, y las neurociencias.
3. 1. Funciones
Oracle incorpora una serie de instrucciones que permiten realizar cálculos avanzados, o bien facilitar la
escritura de ciertas expresiones. Todas las funciones reciben datos para poder operar (parámetros) y devuelven
un resultado (que depende de los parámetros enviados a la función. Los argumentos se pasan entre paréntesis:
nombreFunción [(parámetro1[, parámetro2,...])]
Si una función no precisa parámetros (como SYSDATE) no hace falta colocar los paréntesis.
1.1. Funciones Numéricas
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Matemáticas (SIN, COS, TAN, SQRT, ABS, SIGN, POWER, EXP, MOD, LOG).
Redondeo (CEIL, FLOOR, ROUND, TRUC).
1.1.1. SIN
Esta función devuelve el seno del parámetro p introducido, donde p tiene que estar en radianes (un radián
son 180/π grados, aproximadamente 57.296◦ ), y cuya sintaxis (1.1.1), ejemplo (1.1.1) y salida (1.1.1) se
muestran a continuación:
SIN (parámetro p)
1 SELECT SIN(1) FROM DUAL;
SIN(1)
----------
.841470985
1.1.2. COS
Esta función devuelve el coseno del parámetro p introducido, donde p tiene que estar en radianes (un
radián son 180/π grados, aproximadamente 57.296◦ ), y cuya sintaxis (1.1.2), ejemplo (1.1.2) y salida (1.1.2)
se muestran a continuación:
COS (parámetro p)
3
4. 1 SELECT COS(3.14) FROM DUAL;
COS(3.14)
----------
-.99999873
1.1.3. TAN
Esta función devuelve la tangente del parámetro p introducido, donde p tiene que estar en radianes (te-
niendo especial cuidado en valores que no acepta la función tangente, π /2 + n, n ∈ N), y cuya sintaxis (1.1.3),
ejemplo (1.1.3) y salida (1.1.3) se muestran a continuación:
TAN (parámetro p)
1 SELECT TAN(0.7853) FROM DUAL;
TAN(0.7853)
-----------
.999803692
1.1.4. SQRT
Esta función devuelve la raíz cuadrada del parámetro p introducido, donde p tiene que ser mayor o igual
a cero atendiendo a la definiendo de la función raíz cuadrado que no acepta estos valores devolviendo un
número real, y cuya sintaxis (1.1.4), ejemplo (1.1.4) y salida (1.1.4) se muestran a continuación:
SQRT (parámetro p)
1 SELECT SQRT(8.99) FROM DUAL;
SQRT(8.99)
----------
2.99833287
4
5. 1.1.5. ABS
Esta función devuelve el valor absoluto del parámetro p introducido, y cuya sintaxis (1.1.5), ejemplo
(1.1.5) y salida (1.1.5) se muestran a continuación:
ABS (parámetro p)
1 SELECT ABS(8.99), ABS(-8.99) FROM DUAL;
ABS(8.99) ABS(-8.99)
---------- ----------
8.99 8.99
1.1.6. SIGN
Esta función devuelve el signo del parámetro p introducido, para ello, viene codificado:
0 if p = 0
SIN G(p) = 1 if p > 0
−1 if p < 0
Cuya sintaxis (1.1.6), ejemplo (1.1.6) y salida (1.1.6) se muestran a continuación:
SIGN (parámetro p)
1 SELECT SIGN(8.99), SIGN(-8.99), SIGN(0) FROM DUAL;
SIGN(8.99) SIGN(-8.99) SIGN(0)
---------- ----------- ----------
1 -1 0
1.1.7. POWER
Esta función requiere de dos parámetros de entrada, uno será la base y el otro sérá el exponente. Por lo
que, esta función devolverá el valor obtenido de elevar a la base el exponente. Y donde cuya sintaxis (1.1.7),
ejemplo (1.1.7) y salida (1.1.7) se muestran a continuación:
POWER (base, exponente)
5
6. 1 SELECT POWER(2.3,3) FROM DUAL;
POWER(2.3,3)
------------
12.167
1.1.8. EXP
Esta función es similar a la anterior 1.1.7, salvo que ésta sólo requiere de un parámetro (exponente) y la
base aquí siempre es e. Por lo que, esta función devolverá el valor obtenido del exponente en base e. Y donde
cuya sintaxis (1.1.8), ejemplo (1.1.8) y salida (1.1.8) se muestran a continuación:
EXP (exponente)
1 SELECT EXP(1) FROM DUAL;
EXP(1)
----------
2.71828183
1.1.9. MOD
Esta función devuelve un entero que es el resto obtenido de dividir el p1 entre el p2, y cuya sintaxis (1.1.9),
ejemplo (1.1.9) y salida (1.1.9) se muestran a continuación:
MOD (parámetro1 p1, parámetro2 p2)
1 SELECT MOD(19,5) FROM DUAL;
MOD(19,5)
----------
4
6
7. 1.1.10. LOG
Esta función devuelve el logaritmo en base b del parámetro p (la función sólo está definida para b y p
mayores que cero), y cuya sintaxis (1.1.10), ejemplo (1.1.10) y salida (1.1.10) se muestran a continuación:
LOG ( base b, parámetro p)
1 SELECT LOG(10, 1) FROM DUAL;
LOG(10,1)
----------
0
1.1.11. CEIL
Esta función devuelve el valor entero inmediatamente superior o igual al parámetro p, y cuya sintaxis
(1.1.11), ejemplo (1.1.11) y salida (1.1.11) se muestran a continuación:
CEIL (parámetro p)
1 SELECT CEIL(3.1), CEIL(3), CEIL(3.6) FROM DUAL;
CEIL(3.1) CEIL(3) CEIL(3.6)
---------- ---------- ----------
4 3 4
1.1.12. FLOOR
Esta función devuelve el valor entero inmediatamente inferior o igual al parámetro p, y cuya sintaxis
(1.1.12), ejemplo (1.1.12) y salida (1.1.12) se muestran a continuación:
FLOOR (parámetro p)
1 SELECT FLOOR(3.1), FLOOR(3), FLOOR(3.6) FROM DUAL;
7
8. FLOOR(3.1) FLOOR(3) FLOOR(3.6)
---------- ---------- ----------
3 3 3
1.1.13. ROUND
Esta función redondea a n posiciones decimales. Si se omite n no se redondea con lugares decimales. Y si n
es negativo los números a la izquierda del punto decimal se redondean. La sintaxis (1.1.13), ejemplo (1.1.13)
y salida (1.1.13) se muestran a continuación:
ROUND (parámetro p [, n])
1 SELECT ROUND (45.923, 2), ROUND (45.923, 0), ROUND (45.923, -1)
FROM DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- --------------- ----------------
45.92 46 50
1.1.14. TRUNC
Esta función trunca la columna o valor con precisión de dígitos atendiendo a n. Si se omite n, sin lugares
decimales. Y si n es negativo, los números a la izquierda del punto decimal se truncan a cero. La sintaxis
(1.1.14), ejemplo (1.1.14) y salida (1.1.14) se muestran a continuación:
TRUNC (parámetro p [, n])
1 SELECT TRUNC (45.923, 2), TRUNC (45.923), TRUNC (45.923, -1) FROM
DUAL;
TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
--------------- ------------- ----------------
45.92 45 40
8
9. 1.2. Funciones de Cadenas de Caracteres
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Manipulación (CONCAT, LENGTH, REPLACE, TRIM, LTRIM, RTRIM, LPAD, RPAD, SUBSTR, TO_CHAR).
Transformación (INITCAP, UPPER, LOWER).
1.2.1. CONCAT
Esta función concatena dos cadenas de caracteres. Es equivalente al operador concatenación ||. La sintaxis
(1.2.1), ejemplo (1.2.1) y salida (1.2.1) se muestran a continuación:
CONCAT (cadena1 c1, cadena2 c2)
1 SELECT CONCAT (’BASE DE’, ’ DATOS’) AS CONCATENAR1, (’BASE DE ’ ||
’DATOS’) AS CONCATENAR2 FROM DUAL;
CONCATENAR1 CONCATENAR2
------------- -------------
BASE DE DATOS BASE DE DATOS
1.2.2. INITCAP
Esta función convierte la primera letra de cada palabra en mayúsculas y el resto de letras en minúsculas.
La sintaxis (1.2.2), ejemplo (1.2.2) y salida (1.2.2) se muestran a continuación:
INITCAP (cadena c)
1 SELECT INITCAP (’BASE DE DATOS’) AS INITCAP FROM DUAL;
INITCAP
-------------
Base De Datos
9
10. 1.2.3. UPPER
Esta función convierte en mayúsculas las cadenas de caracteres en minúsculas. La sintaxis (1.2.3), ejemplo
(1.2.3) y salida (1.2.3) se muestran a continuación:
UPPER (cadena c)
1 SELECT UPPER (’Base DE datos’) AS UPPER FROM DUAL;
UPPER
-------------
BASE DE DATOS
1.2.4. LOWER
Esta función convierte en mayúsculas las cadenas de caracteres en minúsculas. La sintaxis (1.2.4), ejemplo
(1.2.4) y salida (1.2.4) se muestran a continuación:
LOWER (cadena c)
1 SELECT LOWER (’Base DE datos’) AS LOWER FROM DUAL;
LOWER
-------------
base de datos
1.2.5. LENGTH
Esta función devuelve la longitud de una cadena de caracteres. La sintaxis (1.2.5), ejemplo (1.2.5) y salida
(1.2.5) se muestran a continuación:
LENGTH (cadena c)
1 SELECT LENGTH (’Base DE datos’) AS LENGTH FROM DUAL;
10
11. LENGTH
----------
13
1.2.6. REPLACE
Esta función busca el texto a buscar (en un determinado texto) y lo cambia por el indicado como texto de
reemplazo. La sintaxis (1.2.6), ejemplo (1.2.6) y salida (1.2.6) se muestran a continuación:
REPLACE(texto, textoABuscar, textoReemplazo)
1 SELECT REPLACE (’Base DE dat’, ’dat’, ’datos’) AS REPLACE FROM DUAL
;
REPLACE
-------------
Base DE datos
1.2.7. TRIM
Esta función elimina del texto los caracteres indicados a la izquierda y a la derecha. Aunque se podría
eliminar sólo los de la izquierda (leading), los de la derecha (trailing) o ambos (both), aunque para ello, será
mejor utilizar RTRIM (1.2.8), LTRIM (1.2.8) ó TRIM (1.2.7). Sino se añade los caracteres se elige el espacio.
La sintaxis (1.2.7), ejemplo (1.2.7) y salida (1.2.7) se muestran a continuación:
TRIM ( [ [leading | trailing | both] trim_character FROM ] cadena
)
1 SELECT TRIM (’ BASE DE DATOS ’) AS TRIM_ESP, TRIM(’*’ FROM ’***
BASE DE DATOS****’) AS TRIM_FROM FROM DUAL;
TRIM_ESP TRIM_FROM
------------- -------------
BASE DE DATOS BASE DE DATOS
11
12. 1.2.8. LTRIM y RTRIM
Esta función suprime un conjunto de caracteres a la izquierda (RTRIM a la derecha) de la cadena, carsup
es el conjunto de caracteres que se van a suprimir y sino se especifica es el espacio. Esta función devuelve
entonces la cadena con el conjunto de caracteres carsup o espacios omitidos por la izquierda de la cadena. La
sintaxis (1.2.8), ejemplo (1.2.8) y salida (1.2.8) se muestran a continuación:
LTRIM (cadena [,carsup])
RTRIM (cadena [,caracter])
1 SELECT LTRIM(’ BASE’) L, LTRIM(’BASE’, ’BA’) LCARSUP, RTRIM (’BASE
’) R, RTRIM(’BASE’, ’ASE’) RCARSUP FROM DUAL;
L LCARSUP R RCARSUP
---- ------- ---- -------
BASE SE BASE B
1.2.9. LPAD y RPAD
Esta función justifica a la derecha (RPAD a la izquierda) con un ancho de n y rellena con un carácter o
string los espacios vacíos. La sintaxis (1.2.9), ejemplo (1.2.9) y salida (1.2.9) se muestran a continuación:
LPAD(texto, anchuraMáxima [, caracterDeRelleno])
RPAD(texto, anchuraMáxima [, caracterDeRelleno])
1 SELECT LPAD(’BASE’, 2) L, LPAD(’BASE’, 6, ’*’) L, RPAD(’BASE’,7,’0’
) R FROM DUAL;
L L R
-- ------ -------
BA **BASE BASE000
1.2.10. SUBSTR
Esta función obtiene los m siguientes caracteres del texto a partir de la posición n (si m no se indica se cogen
desde n hasta el final). La sintaxis (1.2.10), ejemplo (1.2.10) y salida (1.2.10) se muestran a continuación:
SUBSTR(texto,n[,m])
12
13. 1 SELECT SUBSTR(’BASE DE DATOS’, 2, 4) S1, SUBSTR(’BASE DE DATOS’, 2)
S2 FROM DUAL;
S1 S2
---- ------------
ASE ASE DE DATOS
1.2.11. TO_CHAR
Esta función obtiene un texto a partir de un número o una fecha. En especial se utiliza con fechas (ya que
de número a texto se suele utilizar de forma implícita (ver 2). La sintaxis (1.2.11), ejemplo (1.2.11) y salida
(1.2.11) se muestran a continuación:
TO_CHAR(valor, formato)
1 SELECT TO_CHAR(1210.73, ’9999.9’) C1, TO_CHAR(1210.73, ’$9,999.000’
) C2, TO_CHAR(SYSDATE, ’FMMonth DD, YYYY’) C3 FROM DUAL;
C1 C2 C3
------- ----------- ------------------
1210.7 $1,210.730 November 1, 2012
1.3. Funciones de Manejo de Fechas
En este sección se introducirá una serie de funciones más significativas de este tipo. Y dentro de este tipo
se han escogidos las siguientes funciones clasificadas en dos grupos.
Calcular fecha (ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY).
Obtener la fecha (SYSDATE, CURRENT_DATE, TO_DATE).
1.3.1. ADD_MONTHS
Esta función añade a la fecha el número de meses indicado por n. La sintaxis (1.3.3), ejemplo (1.3.3) y
salida (1.3.3) se muestran a continuación:
ADD_MONTHS(fecha,n)
13
14. 1 SELECT ADD_MONTHS(’01-Aug-03’, 3) FECHA FROM DUAL;
FECHA
---------
01-NOV-03
1.3.2. MONTHS_BETWEEN
Esta función obtiene la diferencia en meses entre las dos fechas (puede ser decimal) (ver 1.3.7). La sintaxis
(1.3.3), ejemplo (1.3.3) y salida (1.3.3) se muestran a continuación:
MONTHS_BETWEEN(fecha1,fecha2)
1 SELECT MONTHS_BETWEEN(TO_DATE(’2003/01/01’, ’yyyy/mm/dd’), TO_DATE(
’2003/03/14’, ’yyyy/mm/dd’)) DIF FROM DUAL;
DIF
----------
-2.4193548
1.3.3. SYSDATE
Esta función obtiene la fecha y hora actuales. La sintaxis (1.3.3), ejemplo (1.3.3) y salida (1.3.3) se mues-
tran a continuación:
SYSDATE
1 SELECT SYSDATE FROM DUAL;
SYSDATE
---------
10-NOV-12
14
15. 1.3.4. NEXT_DAY
Esta función indica cual es el día que corresponde a añadir a la fecha el día indicado. El día puede ser
el texto ’Lunes’, ’Martes’, ’Miércoles’,... (si la configuración está en español) o el número de día de la semana
(1=lunes, 2=martes,...). La sintaxis (1.3.4), ejemplo (1.3.4) y salida (1.3.4) se muestran a continuación:
NEXT_DAY(fecha,día)
1 SELECT NEXT_DAY(’01-Aug-03’, ’TUESDAY’) FECHA FROM DUAL;
FECHA
---------
05-AUG-03
1.3.5. LAST_DAY
Esta función obtiene el último día del mes al que pertenece la fecha (ver 1.3.7. Devuelve un valor DATE.
La sintaxis (1.3.5), ejemplo (1.3.5) y salida (1.3.5) se muestran a continuación:
LAST_DAY(fecha)
1 SELECT LAST_DAY(to_date(’2003/03/15’, ’yyyy/mm/dd’)) FECHA FROM
DUAL;
FECHA
---------
31-MAR-03
1.3.6. CURRENT_DATE
Esta función obtiene la fecha y hora actuales e incluye la zona horaria. Devuelve un valor DATE. La sintaxis
(1.3.6), ejemplo (1.3.6) y salida (1.3.6) se muestran a continuación:
CURRENT_DATE
1 SELECT CURRENT_DATE FECHA FROM DUAL;
15
16. FECHA
---------
10-NOV-12
1.3.7. TO_DATE
Esta función convierte textos en fechas. Como segundo parámetro se utilizan los códigos de formato de
fechas comentados en 2. La sintaxis (1.3.7), ejemplo (1.3.7) y salida (1.3.7) se muestran a continuación:
TO_DATE(fecha, formato)
1 SELECT TO_DATE(’2003/07/09’, ’yyyy/mm/dd’) f1, TO_DATE(’20020315’,
’yyyymmdd’) f2 FROM DUAL;
F1 F2
--------- ---------
09-JUL-03 09-JUL-03
16
17. 2. Tabla de Símbolos
Fechas: En el caso de las fechas se indica el formato de conversión, que es una cadena que puede incluir
estos símbolos (en una cadena de texto):
Símbolo Significado
YY Año en formato de dos cifras
YYY Últimas tres cifras del año
YYYY Año en formato de cuatro cifras
SYYYY igual que el anterior, pero si la fecha es anterior al nacimiento de Cristo el año
aparece en negativo
MM Mes en formato de dos cifras
MON Las tres primeras letras del mes
MONTH Nombre completo del mes
DY Día de la semana en tres letras
DAY Día completo de la semana
DD Día en formato de dos cifras
Q Semestre
WW Semana del año
D Día de la semana (del 1 al 7)
DDD Día del año
AD ó A.D. Indicador de periodo Anno Domini (después de Cristo)
BC ó B.C. Indicador de periodo, antes de Cristo. Aparece en fechas anteriores al año cero (en
español se pone AC)
J Año juliano
RN Método Romano de numeración
AM Indicador AM
PM Indicador PM
HH12 Hora de 1 a 12
HH24 Hora de 0 a 23
MI Minutos (0 a 59)
SS Segundos (0 a 59)
SSSS Segundos desde medianoche
/., Posición de los separadores
Números: Para convertir números a textos se usa está función cuando se desean características especiales.
En ese caso en el formato se pueden utilizar estos símbolos:
Símbolo Significado
9 Posición del número
0 Posición del número (muestra ceros)
S En esa posición se coloca el signo del número (tanto el negativo como el positivo)
$ Formato dólar
L Símbolo local de la moneda
C Símbolo internacional de moneda (según la configuración local de Oracle)
D Posición del símbolo decimal (en español, la coma)
G Posición del separador de grupo (en español el punto)
RN Numeración romana en mayúsculas
rn Numeración romana en minúsculas
PR Se muestran los negativos entre símbolos <y >
. Posición del decimal
, Posición del separador de miles
17