elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Algunos ejemplos de PL/SQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algunos ejemplos de PL/SQL  (Leído 8,963 veces)
Saberuneko


Desconectado Desconectado

Mensajes: 2.194



Ver Perfil WWW
Algunos ejemplos de PL/SQL
« en: 3 Junio 2013, 20:34 pm »

Me ha dado por compartir algunos ejemplos de nivel simple que pueden resultar útiles para ser tomados como referencia en algunos casos:

Para estos ejemplos, en ocasiones utilizaremos las siguientes tablas:
Código:
CREATE TABLE EMPLE(
EMP_NO NUMERIC(4) NOT NULL,
NOMBRE VARCHAR2(35),
FECHA_ALTA DATE NOT NULL,
OFICIO NUMERIC(15),
SALARIO NUMERIC(6),
COMISION NUMERIC(6),
DEP_NO NUMERIC(2) NOT NULL);

CREATE TABLE DEPART(
DEP_NO NUMERIC(2),
NOMBRE VARCHAR2(25),
LOCALIDAD VARCHAR2(30));

Mostrar el número de empleados en la tabla EMPLE utilizando un bloque anónimo:

Código:
DECLARE
V_NUM NUMBER;
BEGIN
SELECT COUNT(EMP_NO)
INTO V_NUM
FROM EMPLE;

DBMS_OUTPUT.PUT_LINE('NUMERO DE EMPLEADOS: ' V_NUM);
END;
/

Mostrar la fecha del sistema con formato personalizado:
(Utilización de las funciones TO_CHAR y el valor SYSDATE de la tabla DUAL).

Código:
DECLARE
OP VARCHAR2(100);
BEGIN
SELECT TO_CHAR(SYSDATE, '"EL DIA " DD "DE " MONTH "DE " YYYY "A LAS "  HH24 "Y " MI "CON " SS')
INTO OP
FROM DUAL;

DBMS_OUTPUT.PUT_LINE(OP);
END;
/

Concatenación de dos cadenas pasadas como parámetro a un procedimiento:

Código:
CREATE OR REPLACE PROCEDURE EJ1 (PAR1 IN VARCHAR2, PAR2 IN VARCHAR2)
DECLARE
RES VARCHAR2(40);
BEGIN
RES:= UPPER(PAR1)||UPPER(PAR2);
DBMS_OUTPUT.PUT_LINE(RES);
END;
/

Procedimiento que divide dos números pasados como parámetros:
(Ejemplo de uso de EXCEPTION al dividir entre cero).

Código:
CREATE OR REPLACE PROCEDURE EJ3(NUM1 NUMBER, NUM2 NUMBER)
IS
RES NUMBER;
BEGIN
RES:=NUM1/NUM2;
DBMS_OUTPUT.PUT_LINE(RES);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('NO SE PUEDE DIVIDIR POR CERO');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR INESPERADO');
END;
/

Mostrar los datos de un empleado a partir de su número. Saltará una exception en caso de que el número indicado no exista:

Código:
CREATE OR REPLACE PROCEDURE EJ4(NUM1 NUMBER)
IS
  APE EMPLE.APELLIDO%TYPE;
  SAL EMPLE.SALARIO%TYPE;
  FEC EMPLE.FECHA_ALT%TYPE;
BEGIN
SELECT APELLIDO, SALARIO, FECHA_ALT
INTO APE, SAL, FEC
FROM EMPLE
WHERE EMP_NO LIKE NUM1;
DBMS_OUTPUT.PUT_LINE(APE || ' ' || SAL || ' ' || FEC);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO EXISTE EL EMP_NO');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END;
/

Función que devuelve el número de años completos entre dos fechas.
(Uso de las funciones TRUNC, ABS y TO_DATE y MONTHS_BETWEEN)

Código:
CREATE OR REPLACE FUNCTION EJ9(D1 VARCHAR2, D2 VARCHAR2)
RETURN NUMBER
IS
  DD1 DATE;
  DD2 DATE;
RES NUMBER;
BEGIN
  DD1 := TO_DATE(D1);
  DD2 := TO_DATE(D2);
RES := ABS(MONTHS_BETWEEN(DD1, DD2)/12);
RETURN TRUNC(RES,0);
END;
/

Calcular los trienios entre dos fechas, utilizando la función anterior:
(Cómo utilizar una función dentro de otra)

Código:
CREATE OR REPLACE FUNCTION TRIENIOS(FECHA1 DATE, FECHA2 DATE)
RETURN NUMBER
AS
V_TRIENIOS NUMBER(6);
BEGIN
V_TRIENIOS :=TRUNC(ANOS_DIF(FECHA1,FECHA2)/3);
RETURN V_TRIENIOS;
END;

Ejemplo de función recursiva, cálculo del factorial de un número pasado como parámetro de la función:

Código:
CREATE FUNCTION FACTORIAL (V_NUM NUMBER)
RETURN NUMBER
IS
BEGIN
IF (V_NUM<=1) THEN
RETURN 1;
ELSE
RETURN V_NUM*FACTORIAL(V_NUM-1);
END IF;
END;

Convertir un número a día correspondiente de la semana.
(Ejemplo muy básico de una estructura tipo CASE).

Código:
CREATE OR REPLACE FUNCTION DIASCASE(NUM NUMBER)
RETURN VARCHAR2
AS
BEGIN
CASE NUM
WHEN '1' THEN
RETURN 'LUNES';
WHEN '2' THEN
RETURN 'MARTES';
WHEN '3' THEN
RETURN 'MIERCOLES';
WHEN '4' THEN
RETURN 'JUEVES';
WHEN '5' THEN
RETURN 'VIERNES';
WHEN '6' THEN
RETURN 'SABADO';
WHEN '7' THEN
RETURN 'DOMINGO';
ELSE
    RETURN 'NUMERO ERRONEO';
END CASE;
END;
/

Procedimiento que escribe los números de 1 a 10:
(Ejemplo simple de la utilización de LOOP).

Código:
CREATE OR REPLACE PROCEDURE CONTAR1()
IS

VAR NUMERIC := 0;

BEGIN

LOOP
VAR := VAR + 1;
DBMS_OUTPUT.PUT_LINE(VAR);
EXIT WHEN VAR = 10;
END LOOP;
END;
/

Contar desde un máximo hasta un mínimo, con un cierto salto, los tres valores son parámetros:

Código:
CREATE OR REPLACE PROCEDURE CONTAR4(MN NUMERIC, MX NUMERIC, JP NUMERIC)
IS
VAR NUMERIC := MN;
BEGIN
DBMS_OUTPUT.PUT_LINE('DESDE ' || MN || ' HASTA ' || MX || ' CON SALTO ' || JP);
LOOP
DBMS_OUTPUT.PUT_LINE(VAR);
VAR := VAR + JP;
EXIT WHEN VAR > MX;
END LOOP;
END;
/

Contar desde un número hasta cero, en este caso con un bucle for:

Código:
CREATE OR REPLACE PROCEDURE CONTAR(N NUMBER)
IS
  C NUMBER;
BEGIN
  C := N;
IF N BETWEEN 1 AND 10 THEN
FOR C IN REVERSE 0..N
LOOP
DBMS_OUTPUT.PUT_LINE(C);
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('NUMERO FUERA DE RANGO (1-10)');
END IF;
END;
/

Invertir una cadena introducida como parámetro:
(Uso de función SUBSTR)

Código:
CREATE OR REPLACE PROCEDURE REVS2(WD VARCHAR2)
IS
C NUMBER;
L NUMBER;
RS_OUT VARCHAR2(20);
BEGIN
C := 0;
L := LENGTH(WD);
FOR C IN REVERSE 1..L
LOOP
RS_OUT := RS_OUT || SUBSTR(WD, C, 1);
END LOOP;
DBMS_OUTPUT.PUT_LINE(RS_OUT);
END;
/


En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.764


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: Algunos ejemplos de PL/SQL
« Respuesta #1 en: 11 Junio 2013, 20:51 pm »

Interesante, gracias por el aporte, lo he agregado a las FAQ's


En línea





Dominio en venta: https://forojapones.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejemplos de C#
.NET (C#, VB.NET, ASP)
aca_brond 3 7,220 Último mensaje 18 Octubre 2005, 19:02 pm
por Kpax
Ejemplos de crackmes
Ingeniería Inversa
XPLOIT80 7 3,265 Último mensaje 18 Febrero 2006, 06:46 am
por XPLOIT80
[Python] VPython [+ Algunos ejemplos y tutorial +]
Scripting
Erik# 0 10,514 Último mensaje 20 Febrero 2009, 10:20 am
por Erik#
Para que podais ver algunos ejemplos de edición video.
Multimedia
portaro 0 2,539 Último mensaje 17 Marzo 2014, 01:53 am
por portaro
Para que sirve C en el mundo de la ciberseguridad?, Algunos ejemplos?
Programación C/C++
Kainor 2 3,895 Último mensaje 23 Julio 2022, 02:28 am
por RicRed
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines