Professional Documents
Culture Documents
Respuestas Ejercicios Estructuras de Control
Respuestas Ejercicios Estructuras de Control
Respuestas Ejercicios Estructuras de Control
UPDATE emp
SET salary = salary + incentive
WHERE employee_id = emp_id;
updated := 'Yes';
END IF;
DBMS_OUTPUT.PUT_LINE (
'Table updated? ' || updated || ', ' ||
'incentive = ' || incentive || '.'
);
END test1;
BEGIN
test1(2300, 2000, 144);
test1(3600, 3000, 145);
END;
/
3. Escriba un programa PL / SQL para verificar si un número es par o
impar.
DECLARE
n1 NUMBER := &num1;
BEGIN
-- test if the number provided by the user is even
IF MOD(n1,2) = 0 THEN
DBMS_OUTPUT.PUT_LINE ('The number. '||n1||
' is even number');
ELSE
DBMS_OUTPUT.PUT_LINE ('The number '||n1||' is odd
number.');
END IF;
DBMS_OUTPUT.PUT_LINE ('Done Successfully');
END;
/
4. Escriba un procedimiento PL / SQL para calcular el incentivo en un
objetivo específico, de lo contrario, un incentivo general a pagar
utilizando IF-THEN-ELSE.
DECLARE
PROCEDURE test1 (
sal_achieve NUMBER,
target_qty NUMBER,
emp_id NUMBER
)
IS
incentive NUMBER := 0;
BEGIN
IF sal_achieve > (target_qty + 200) THEN
incentive := (sal_achieve - target_qty)/4;
ELSE
incentive :=75;
END IF;
DBMS_OUTPUT.PUT_LINE ('incentive = ' || incentive);
UPDATE emp
SET salary = salary + incentive
WHERE employee_id = emp_id;
END test1;
BEGIN
test1(2300, 2000, 144);
test1(3600, 3000, 145);
END;
/
5. Escriba un programa PL / SQL para verificar si una fecha cae en fin de
semana, es decir, SÁBADO o DOMINGO.
DECLARE
dt1 DATE := TO_DATE('&new_dt', 'DD-MON-YYYY');
get_day VARCHAR2(15);
BEGIN
get_day := RTRIM(TO_CHAR(dt1, 'DAY'));
IF get_day IN ('SATURDAY', 'SUNDAY') THEN
dbms_output.new_line;
DBMS_OUTPUT.PUT_LINE
('The day of the given date is '||get_day||' and it falls
on weekend');
ELSE
dbms_output.new_line;
DBMS_OUTPUT.PUT_LINE ('The day of the given date is
'||get_day||' and it does not fall on the weekend');
END IF;
DBMS_OUTPUT.PUT_LINE ('Execution done successfully.');
END;
/
6. Escriba un procedimiento PL / SQL para calcular el incentivo logrado de
acuerdo con el límite de venta específico
DECLARE
PROCEDURE test1 (sal_achieve NUMBER)
IS
incentive NUMBER := 0;
BEGIN
IF sal_achieve > 44000 THEN
incentive := 1800;
ELSIF sal_achieve > 32000 THEN
incentive := 800;
ELSE
incentive := 500;
END IF;
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE (
'Sale achieved : ' || sal_achieve || ', incentive :
' || incentive || '.'
);
END test1;
BEGIN
test1(45000);
test1(36000);
test1(28000);
END;
/
7. Escriba un programa PL / SQL para contar el número de empleados en
el departamento 50 y verifique si este departamento tiene vacantes o
no.
SET SERVEROUTPUT ON
DECLARE
tot_emp NUMBER;
BEGIN
SELECT Count(*)
INTO tot_emp
FROM employees e
join departments d
ON e.department_id = d.department_id
WHERE e.department_id = 50;
BEGIN
get_dep_id := '&new_dep_id';
SELECT Count(*)
INTO tot_emp
FROM employees e
join departments d
ON e.department_id = d.department_id
WHERE e.department_id = get_dep_id;
CASE t_day
WHEN '1' THEN
dbms_output.Put_line ('The date you entered is Sunday.');
WHEN '2' THEN
dbms_output.Put_line ('The date you entered is Monday.');
WHEN '3' THEN
dbms_output.Put_line ('The date you entered is Tuesday.');
WHEN '4' THEN
dbms_output.Put_line ('The date you entered is Wednesday.');
WHEN '5' THEN
dbms_output.Put_line ('The date you entered is Thursday.');
WHEN '6' THEN
dbms_output.Put_line ('The date you entered is Friday.');
WHEN '7' THEN
dbms_output.Put_line ('The date you entered is Saturday.');
END CASE;
END;
/
18. Escriba un programa en PL / SQL para mostrar los usos del bucle
anidado.
DECLARE
m PLS_INTEGER := 0;
n PLS_INTEGER := 0;
k PLS_INTEGER;
BEGIN
<>
LOOP
n := n + 1;
k := 0;
DBMS_OUTPUT.PUT_LINE ('The values of inner loop are: ');
<>
LOOP
k := k + 1;
m := m + n * k; -- Sum several products
SELECT min_salary,
max_salary
INTO emp_min_salary,
emp_max_salary
FROM JOBS
WHERE JOB_ID = (SELECT JOB_ID
FROM EMPLOYEES
WHERE EMPLOYEE_ID = tmp_emp_id);
-- calculate mid-range
emp_mid_salary := (emp_min_salary + emp_max_salary) / 2;
-- get salary of the given employee
SELECT salary,first_name
INTO tmp_salary,tmp_emp_name
FROM employees
WHERE employee_id = tmp_emp_id;
-- update salary
ELSE
DBMS_OUTPUT.PUT_LINE('The employee '||tmp_emp_name||' ID ' ||
TO_CHAR(tmp_emp_id) ||
' works in salary ' || TO_CHAR(tmp_salary) ||
' which is equal to the mid-range of salary ' ||
TO_CHAR(emp_mid_salary));
END IF;
END;
/
BEGIN
LOOP
m := m + 1;
DBMS_OUTPUT.PUT_LINE ('The value of m = ' || m);
LOOP
n := n + 1;
DBMS_OUTPUT.PUT_LINE ('The value of n = ' || n);
EXIT WHEN (n > 4);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Exited inner loop');
DECLARE
n NUMBER := 6;
BEGIN
FOR n IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE (
'When local the value: ' || TO_CHAR(n) || ', but the value as global: '
||
TO_CHAR(main_label.n)
);
END LOOP;
END main_label;
/
26. Escriba un programa en PL / SQL para explicar los usos del bucle
for anidado con etiqueta
BEGIN
<>
FOR j IN 1..5 LOOP
<<loop_inner>>
FOR j IN 1..4 LOOP
IF loop_outer.j = 4 THEN
DBMS_OUTPUT.PUT_LINE
('When the value of j of outer loop: ' || TO_CHAR(loop_outer.j) || '
then the value of j in the inner loop: '
|| TO_CHAR(loop_inner.j));
END IF;
END LOOP loop_inner;
END LOOP loop_outer;
END;
/
27. Escriba un programa en PL / SQL para imprimir los números primos
entre 1 y 50.
DECLARE
i NUMBER(3);
j NUMBER(3);
BEGIN
dbms_output.Put_line('The prime numbers are:');
dbms_output.new_line;
i := 2;
LOOP
j := 2;
LOOP
EXIT WHEN( ( MOD(i, j) = 0 )
OR ( j = i ) );
j := j + 1;
END LOOP;
IF( j = i )THEN
dbms_output.Put(i||' ');
END IF;
i := i + 1;
exit WHEN i = 50;
END LOOP;
dbms_output.new_line;
END;
/
<>
DBMS_OUTPUT.PUT_LINE(TO_CHAR(n) || msg);
END;
/
DECLARE
number_of_emp NUMBER;
BEGIN
SELECT COUNT(employee_id) INTO number_of_emp
FROM employees;
DECLARE
n1 NUMBER;
n2 NUMBER;
BEGIN
SELECT c1,c2 INTO n1,n2 FROM TEST WHERE c1>1;
IF n2=4 THEN
INSERT INTO TEST VALUES(n2,n1);
ELSE
INSERT INTO TEST VALUES(n2+15,n1+15);
END IF;
END;
/