Académique Documents
Professionnel Documents
Culture Documents
Objetivos
Luego de completar esta leccin, usted debera estar capacitado para hacer lo siguiente:
26-2
Estructuras de Control
En un lenguaje procedural como PL/SQL, existen tres estructuras bsicas de control de programacin:
1. 2.
En una estructura secuencial, una serie de instrucciones son ejecutadas desde el inicio al fin en un orden lineal. La estructura de seleccin es tambien conocida como una estructura de decisin o una estructura IF. Envuelve condiciones con un resultado TRUE (verdadero) o FALSE (falso) En una estructura looping o de lazos, una serie de instrucciones es ejecutado repetidamente.
3.
26-3
Enter value for dia: Domingo Domingo es feriado! PL/SQL procedure successfully completed.
26-4
26-5
Sentencia DECODE
SELECT Lname, Fname, DECODE(positionId, 1, Salary*1.2, 2, Salary*1.15, 3, Salary*1.05, Salary) "Salario Nuevo" FROM employee;
FNAME Salario Nuevo --------------- ------------John 349800 Larry 172500 Sandi 94875 Alex 69825 Derek 92000 Jinku 28175 Stanley 51750 Sunny 38500
26-6
Sentencia ELSIF
DECLARE v_pos NUMBER(1):= &Posicion; BEGIN IF (v_pos=1) THEN DBMS_OUTPUT.PUT_LINE('20% incremento'); ELSIF v_pos=2 THEN DBMS_OUTPUT.PUT_LINE('15% incremento'); ELSIF v_pos=3 THEN DBMS_OUTPUT.PUT_LINE('10% incremento'); ELSIF v_pos=4 THEN DBMS_OUTPUT.PUT_LINE('5% incremento'); ELSE DBMS_OUTPUT.PUT_LINE('NO incremento'); END IF; END;
Enter value for posicion: 2 15% incremento PL/SQL procedure successfully completed.
26-7
DECLARE n NUMBER(3):= ¬a; calificacion CHAR; BEGIN IF n >= 90 AND n <= 100 THEN calificacion := 'A'; END IF; IF n >= 80 AND n <= 89 THEN calificacion := 'B'; END IF; IF n >= 70 AND n <= 79 THEN calificacion := 'C'; END IF; IF n >= 60 AND n <= 69 THEN calificacion := 'D'; END IF; IF n >= 0 AND n <= 59 THEN calificacion := 'F'; END IF; IF n < 0 AND n > 100 THEN calificacion := 'U'; END IF; DBMS_OUTPUT.PUT_LINE('Nota es ' || TO_CHAR(n)); DBMS_OUTPUT.PUT_LINE('Calificacin es ' || calificacion); END; Enter value for nota: 93 Nota es 93 Calificacin es A PL/SQL procedure successfully completed.
26-8
Sentencia ELSIF
DECLARE n NUMBER(3):= ¬a; calificacion CHAR; BEGIN IF n >= 90 AND n <= 100 THEN calificacion := 'A'; ELSIF n >= 80 AND n <= 89 THEN calificacion := 'B'; ELSIF n >= 70 THEN calificacion := 'C'; ELSIF n >= 60 THEN calificacion := 'D'; ELSIF n >= 0 THEN calificacion := 'F'; ELSIF n < 0 AND n > 100 THEN calificacion := 'U'; END IF; DBMS_OUTPUT.PUT_LINE('Nota es ' || TO_CHAR(n)); DBMS_OUTPUT.PUT_LINE('Calificacin es ' || calificacion); END; Enter value for nota: 77 Nota es 77 Calificacin es C PL/SQL procedure successfully completed.
26-9
Sentencia CASE
DECLARE /* Ejemplo de CASE */ v_num NUMBER:= &cualquier_num; v_residuo NUMBER; BEGIN v_residuo:= MOD(v_num, 2); CASE v_residuo WHEN 0 THEN DBMS_OUTPUT.PUT_LINE(v_num || ' es PAR'); ELSE DBMS_OUTPUT.PUT_LINE(v_num || ' es IMPAR'); END CASE; END;
26-10
26-11
DECLARE v_genero CHAR:= '&sexo'; v_edad NUMBER(2):= '&edad'; v_recargo NUMBER(3,2); BEGIN IF (v_genero = 'M' AND v_edad >= 25) THEN v_recargo:= 0.05; END IF; IF (v_genero = 'M' AND v_edad < 25) THEN v_recargo:= 0.10; END IF; IF (v_genero = 'F' AND v_edad >= 25) THEN v_recargo:= 0.03; END IF; IF (v_genero = 'F' AND v_edad < 25) THEN v_recargo:= 0.06; END IF; DBMS_OUTPUT.PUT_LINE('GENERO :'||v_genero); DBMS_OUTPUT.PUT_LINE('EDAD :'|| TO_CHAR(v_edad)); DBMS_OUTPUT.PUT_LINE('RECARGO :'|| TO_CHAR(v_recargo)); END; Enter value for sexo: F Enter value for edad: 18 GENERO :F EDAD :18 RECARGO :.06 PL/SQL procedure successfully completed.
26-12
DECLARE v_genero CHAR:= '&sexo'; v_edad NUMBER(2):= '&edad'; v_recargo NUMBER(3,2); BEGIN IF (v_genero = 'M') THEN /* HOMBRE */ IF (v_edad >= 25) THEN v_recargo:= 0.05; ELSE v_recargo:= 0.10; END IF; ELSE /* MUJER */ IF (v_edad >= 25) THEN v_recargo:= 0.03; ELSE v_recargo:= 0.06; END IF; END IF; DBMS_OUTPUT.PUT_LINE('GENERO :'||v_genero); DBMS_OUTPUT.PUT_LINE('EDAD :'|| TO_CHAR(v_edad)); DBMS_OUTPUT.PUT_LINE('RECARGO :'|| TO_CHAR(v_recargo)); END; Enter value for sexo: F Enter value for edad: 18 GENERO :F EDAD :18 RECARGO :.06 PL/SQL procedure successfully completed.
Sentencia IF anidado
26-13
26-14
26-15
Loop FOR
DECLARE v_conteo NUMBER(2); v_suma NUMBER(2):= 0; v_promedio NUMBER(3,1); BEGIN FOR v_conteo IN 1..10 LOOP v_suma:= v_suma + v_conteo; END LOOP; v_promedio:= v_suma/10; DBMS_OUTPUT.PUT_LINE('Promedio del 1 al 10 es ' ||TO_CHAR(v_promedio)); END;
26-16
26-17
BEGIN INSERT INTO employee (employeeId, Lname, Fname, Salary, DeptId) VALUES (employee_employeeId_seq.NEXTVAL, 'RAI', 'AISH', 90000, dept_deptId_seq.CURRVAL); COMMIT; END; PL/SQL procedure successfully completed. END;
26-18
Sentencia DELETE
DECLARE v_deptId dept.deptId%TYPE BEGIN SELECT deptId INTO v_deptId FROM dept WHERE UPPER(deptname) = '&dept_nombre' DELETE FROM employee WHERE deptId = v_deptId; COMMIT; END;
Enter value for dept_nombre: IT PL/SQL procedure successfully completed.
26-19
Sentencia UPDATE
DECLARE v_incremento NUMBER:= &Increm_decimal BEGIN UPDATE employee SET Salary = Salary * (1 + v_incremento) WHERE employeeId = &empleado_ID; COMMIT; END; Enter value for increm_decimal: 0.15 Enter value for empleado_ID: 545 PL/SQL procedure successfully completed.
26-20
line inv_number: invoice line_number: int p_code: product line_units: float line_price: float 0..* encontrado_en
1 v endor + + + + + + v_code: int v_name: char v_contact: char v_areacode: char 1 v_phone: char v_state: char v_order: char + + suministra + 0..* + + + + product p_code: char p_descript: char p_indate: char p_qoh: int p_min: int p_price: float p_discount: float v_code: vendor
26-21
11 rows selected.
26-22
26-23
26-24
26-25
Al terminar el Laboratorio enve sus respuestas al e-mail: habantoc@upao.edu.pe Use el formato siguiente en su envio: BD-Lab09_Nombre_Apellido 1. Escriba un block PL/SQL para encontrar si un ao es un ao bisiesto. Un ao bisiesto es diisible por 4 pero no por 100, o es divisible por 400. Por ejemplo, 2000 y 2004 son aos bisiestos, pero 1900 y 2001 no son aos bisiestos. (Sugerencia: La funcin MOD(n,d) divide n por d y retorna el residuo entero de la operacin) 2. Escriba un block PL/SQL para imprimir a todos los nmeros impares entre 1 y 10 usando un loop bsico. 3. Use un loop FOR , imprima los valores 10 al 1 en orden inverso. 4. Cree una tabla llamado ITEM con una columna llamada ItemNum con el tipo de dato NUMBER. Escriba un programa PL/SQL para insertar valores del 1 al 5 para ItemNum 5. Ingreses un nmero con una variable d sustitucin, y luego imprima su tabla de multiplicacin usando un loop WHILE. 6. Ingrese un nmero de mes entre 1 y 12 y un ao de cuatro dgitos, e imprima el nmero de das, en aquel mes. Para Febrero (mes = 2), chequee por ao bisiesto para mostrar el nmero de das igual a 28 o 29. 7. Use un block PL/SQL para eliminar el nmero de tem 4 de la tabla ITEM creado en el laboratorio 4. 8. Escriba un block PL/SQL que pida al usuario un ID vlido de usuario. Recupere los nombres de los empleados, descripcin de su calificacin, salario y comisin. Imprima el nombre, calificacin, y la suma del salario y comisin 9. Usted fue a una tienda de videos y rent un DVD que es retornable en 3 das contado desde la fecha que se renta. Ingrese la fecha de renta, mes de la renta, ao de la renta. Calcule e imprima la fecha de retorno, mes de retorno, y ao de retorno. Poer ejemplo: Fecha de la Mes de la Ao de la Fecha de Mes de Ao de Renta Renta renta Retorno retorno Retorno 2 27 30 12 2 12 2003 2000 2003 5 1 2 12 3 1 2003 2000 2004