Sei sulla pagina 1di 16

Estructuras de Control en PL/SQL

Base de datos II Ing Marco Coral

Declaracin %TYPE
%TYPE define una variable o constante escalar a partir del tipo de otro identificador o columna de una tabla Declare car caracter %TYPE; descripcion articulos.descrip %TYPE;

Declaracin de variables usando %TYPE attribute


DECLARE empid employees.employee_id%TYPE; -- employee_id datatype is NUMBER(6) emplname employees.last_name%TYPE; -- last_name datatype is VARCHAR2(25)

Ejemplo
DECLARE -- declare variables using %TYPE attribute empid employees.employee_id%TYPE; emplname employees.last_name%TYPE; BEGIN empid := 100301; emplname := 'Patel'; DBMS_OUTPUT.PUT_LINE(Numero de empleado: ' || empid); DBMS_OUTPUT.PUT_LINE(Nombre del Empleado: ' || emplname); END;

Using %ROWTYPE

%ROWTYPE define una variable tupla a partir de otra variable tupla o del nombre de una relacin.

Tupla_fact facturas %ROWTYPE; Tupla_fact2 tupla_fact %ROWTYPE;

ejemplo
DECLARE emp_rec employees%ROWTYPE; BEGIN SELECT * INTO emp_rec FROM EMPLOYEES WHERE employee_id = 120; DBMS_OUTPUT.PUT_LINE(Salario, Nombre del Empleado y fecha de contrato: ' || emp_rec.salary || ' ' || emp_rec.last_name || ' ' || emp_rec.Hire_date); END;

PL/SQL estructuras de Control

Condicional With IF-THEN Sentencia Condicional With the CASE Control Interactivo With LOOPs Control Secuencial With GOTO

IF THEN
IF expresin_lgica THEN intrucciones_PL/SQL;

Ejemplo
SET SERVEROUTPUT ON DECLARE Nombre Varchar2(25); sal NUMBER(8,2); bonus NUMBER(6,2); hiredate DATE; empid NUMBER(6) := &x; //// ojo hay que definirlo en IE BEGIN SELECT last_name, salary, hire_date INTO Nombre, sal, hiredate FROM employees WHERE employee_id = empid; IF hiredate > ('01/01/90') THEN bonus := sal/20; DBMS_OUTPUT.PUT_LINE('Bonus para el empleado: ' || Nombre || ' con ID ' || empid ||' es: '||bonus ); END IF; END;

IF-THEN-ELSEIF-ELSE
[ELSIF expresin_lgica THEN intrucciones_PL/SQL;] [ELSE intrucciones_PL/SQL;] END IF;

ejemplo
DECLARE bonus NUMBER(6,2); empid NUMBER(6) := 120; hiredate DATE; BEGIN SELECT hire_date INTO hiredate FROM employees WHERE employee_id = empid; IF hiredate > ('01/01/98') THEN bonus := 500; ELSIF hiredate > ('01/01/96') THEN bonus := 1000; ELSE bonus := 1500; END IF; DBMS_OUTPUT.PUT_LINE('El Bono para el empleado : ' || empid || ' es: ' || bonus ); END;

Construya un bloque plsql que le permita obtener el suelto total de un empleado cualquiera: (salario + comisin)

Si este tiene mas de 60 meses trabajando para la empresa se le aade un bono de 3000 Si este tiene hasta 60 meses trabajando para la empresa se le aade un bono de 1000 Si este tiene hasta 30 meses trabajando para la empresa se le aade un bono de 500 Si tiene menos de 18 meses simplemente se le extender un mensaje de agradecimiento

La sentencia CASE-WHEN en PL/SQL


BEGIN [Variable] CASE [Variable] WHEN Opcion' THEN DBMS_OUTPUT.PUT_LINE(' Salida '); ELSE DBMS_OUTPUT.PUT_LINE(Salida'); END CASE; END;

Utilizando IF-THEN_ELSE y CASE en PL/SQL


DECLARE empid NUMBER(6) := 120; jobid VARCHAR2(10); sal NUMBER(8,2); sal_raise NUMBER(3,2); BEGIN SELECT job_id, salary INTO jobid, sal from employees WHERE employee_id = empid; CASE WHEN jobid = 'PU_CLERK' THEN IF sal < 3000 THEN sal_raise := .08; ELSE sal_raise := .07; END IF; WHEN jobid = 'SH_CLERK' THEN IF sal < 4000 THEN sal_raise := .06; ELSE sal_raise := .05; END IF; WHEN jobid = 'ST_CLERK' THEN IF sal < 3500 THEN sal_raise := .04; ELSE sal_raise := .03; END IF; ELSE BEGIN DBMS_OUTPUT.PUT_LINE('No raise for this job: ' || jobid); END; END CASE; DBMS_OUTPUT.PUT_LINE('Percent salary raise for employee: ' || empid || ' is: '|| sal_raise ); END;

Ejemplo

DECLARE grade CHAR(1); BEGIN grade := '&X'; CASE grade WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excellent'); WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Very Good'); WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Good'); WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Fair'); WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Poor'); ELSE DBMS_OUTPUT.PUT_LINE('No such grade'); END CASE;

Para un empleado cualquiera se desea saber el sueldo que tendra si se quiere practicar un aumento basado en lo siguiente: Si es ST_MAN y trabaja mas de 6 meses un aumento de 350 soles Si es SA_REP y trabaja mas de 12 meses un aumento de 500 soles Si es IT_PROG y trabaja mas de 15 meses un aumento de 700 soles Si es HR_REP y trabaja mas de 20 meses un aumento de 100 soles Si es manager de algn empleado y gana menos que el promedio de los dems manager un aumento de 1500 soles De lo contrario solo un bono de 100 soles.

Potrebbero piacerti anche