0% encontró este documento útil (0 votos)
40 vistas4 páginas

Funciones y Procedimientos PL/SQL para Sucursales

El documento describe 4 procedimientos y funciones SQL para una base de datos bancaria: 1) una función que devuelve información sobre una sucursal, 2) un procedimiento que muestra los datos de una cuenta de un cliente, 3) un disparador para comprobar importes de movimientos, 4) un procedimiento que muestra los saldos de las cuentas de un cliente.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas4 páginas

Funciones y Procedimientos PL/SQL para Sucursales

El documento describe 4 procedimientos y funciones SQL para una base de datos bancaria: 1) una función que devuelve información sobre una sucursal, 2) un procedimiento que muestra los datos de una cuenta de un cliente, 3) un disparador para comprobar importes de movimientos, 4) un procedimiento que muestra los saldos de las cuentas de un cliente.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1.

Escribe una función a la que le pasamos el código de una sucursal y nos devuelve una
cadena de caracteres con la siguiente información y formato:

Dirección – Población – Teléfono – Nº de cuentas corrientes y depósitos de la sucursal

Si el código pasado no corresponde a ninguna sucursal, devolverá la cadena vacía.

CREATE OR REPLACE FUNCTION EX_2018_1(CODSUCURSAL%TYPE)

RETURN VARCHAR2

AS

DIRSUC VARCHAR2(40);

POBSUC VARCHAR2(30);

TELSUC VARCHAR2(9);

NUMERO_CUENTAS NUMBER(5);

BEGIN

SELECT DIRSUCURSAL,POBSUCURSAL,TELSUCURSAL INTO DIRSUC,POBSUC,TELSUC FROM

EB_SUCURSALES WHERE CODSUCURSAL=CODSUC;

SELECT COUNT(*) INTO NUMERO_CUENTAS FROM EB_CUENTAS WHERE


SUCURSAL=CODSUC;

RETURN DIRSUC||' - '||POBSUC||' - '||TELSUC||' - '||NUMERO_CUENTAS;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RETURN 'LA SUCURSAL NO EXISTE';

END;

SELECT EX_2018_1('0002') FROM DUAL

2. Realiza un procedimiento al que le pasamos el DNI de un cliente y un tipo de cuenta y nos


muestra todos los datos del cliente y la relación de cuentas del tipo pasado de las que es titular
y en las que es autorizado (por separado). Si el DNI pasado no corresponde a ningún cliente
informará de esta situación.

CREATE OR REPLACE PROCEDURE EX_2018_22(DNI VARCHAR2,TC VARCHAR2)

AS
NC EB_CLIENTES,NOMCLI%TYPE;

AC VARCHAR2(25);

DC VARCHAR2(30);

CURSOR CUENTAS_T IS SELECT * FROM EB_CUENTAS WHERE CLITITULAR=DNI

AND TIPO=TC;

CURSOR CUENTAS_A IS SELECT * FROM EB_CUENTAS WHERE CLIAUTORIZADO=DNI

AND TIPO=TC;

BEGIN

SELECT NOMCLI,APECLI,DIRCLI INTO NC,AC,DC FROM EB_CLIENTES

WHERE DNICLI=DNI;

DBMS_OUTPUT.PUT_LINE(NC||' '||AC||' '||DC);

DBMS_OUTPUT.PUT_LINE('CUENTAS EN LAS QUE EL CLIENTE ES TITULAR');

FOR F IN CUENTAS_T LOOP

DBMS_OUTPUT.PUT_LINE([Link]||' '||[Link]||' '||[Link]);

END LOOP;

DBMS_OUTPUT.PUT_LINE('CUENTAS EN LAS QUE EL CLIENTE ES AUTORIZADO');

FOR F IN CUENTAS_A LOOP

DBMS_OUTPUT.PUT_LINE([Link]||' '||[Link]||' '||[Link]);

END LOOP;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('CLIENTE INEXISTENTE');

END;

3. Escribe un disparador que compruebe que al modificar el importe de un movimiento, este


no pueda ser negativo ni superar en más de un 20% el importe medio de los movimientos del
mismo concepto.

CREATE OR REPLACE TRIGGER EX_2018_3

BEFORE UPDATE OF IMPORTE ON EB_MOVIMIENTOS


FOR EACH ROW

DECLARE

PRAGMA AUTONOMOUS_TRANSACTION;

IMPORTE_MEDIO NUMBER(8,2);

BEGIN

IF :[Link]<0 THEN

:[Link]:=:[Link];

END IF;

SELECT AVG(IMPORTE) INTO IMPORTE_MEDIO FROM EB_MOVIMIENTOS

WHERE CONCEPTO=:[Link];

IF :[Link]>IMPORTE_MEDIO*1.2 THEN

:[Link]:=IMPORTE_MEDIO;

END IF;

END;

SELECT * FROM EB_MOVIMIENTOS

UPDATE EB_MOVIMIENTOS SET IMPORTE=5000 WHERE NUMEROCTA='00001' AND


SUCURSAL='0001' AND NUMEROMOV=1

4. Realiza un procedimiento que nos muestre el saldo de cada una de las cuentas de un cliente
pasándole por parámetro el DNI del cliente. El procedimiento debe mostrar el nombre y
apellidos del cliente y los datos de la cuenta

CREATE OR REPLACE PROCEDURE EX_2018_4(DNI VARCHAR2)

AS

NC VARCHAR2(25);

AC VARCHAR2(35);

SUMA_I NUMBER(8, 2);

SUMA_R NUMBER(8, 2);

CURSOR CUENTAS_CLIENTE IS SELECT * FROM EB_CUENTAS


WHERE CLITITULAR=DNI OR CLIAUTORIZADO=DNI;

BEGIN

SELECT NOMCLI,APECLI INTO NC,AC FROM EB_CLIENTES WHERE DNICLI=DNI;

DBMS_OUTPUT.PUT_LINE(AC||', '||NC);

DBMS_OUTPUT.PUT_LINE('------- CUENTAS ---------');

FOR F IN CUENTAS_CLIENTE LOOP

SELECT SUM(IMPORTE) INTO SUMA_I FROM EB_MOVIMIENTOS WHERE TIPO='I' AND

NUMEROCTA=[Link] AND SUCURSAL=[Link];

SELECT SUM(IMPORTE) INTO SUMA_I FROM EB_MOVIMIENTOS WHERE TIPO='R' AND

NUMEROCTA=[Link] AND SUCURSAL=[Link];

SALDO:=SUMA_I-SUMA_R;

DBMS_OUTPUT.PUT_LINE([Link]||' '||[Link]||' '||[Link]

||' '||[Link]||' '||SALDO);

END LOOP;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('EL CLIENTE NO EXISTE');

END;

También podría gustarte