Anda di halaman 1dari 5

Introduction to Oracle: SQL and PL/SQL, Instructor Guide, Volumen 1

Práctica 18: Interactuando con el Servidor Oracle


--------------------------------------------------------------------

Ejercicio 1:
Cree un bloque PL/SQL que seleccione el número de departamento máximo de la
tabla DEPT y lo almacene
en una variable de SQL*PLUS. Imprima el resultado en pantalla. G
uarde el bloque PL/SQL en un archivo
nombrándolo p18q1.sql.
G_MAX_DEPTNO
------------
40
Respuesta 1)
------------
SQL> edit p18q1.sql
Contenido del archivo de comandos con el bloque PL/SQL: p18q1.sq
l
----------------------------------------------------------------
-
"
VARIABLE G_MAX_DEPTNO NUMBER;
DECLARE
v_max_deptno DEPT.DEPTNO%TYPE;
BEGIN
SELECT MAX( DEPTNO )
INTO v_max_deptno
FROM DEPT;
:G_MAX_DEPTNO := v_max_deptno;
END;
/
PRINT G_MAX_DEPTNO;
"
SQL> start p18q1.sql
Ejercicio 2: Modifique el bloque PL/SQL que creó en el Ejercicio 1 para inserta
r un registro/fila de un departamento nuevo dentro de la tabla DEPT.
Guarde el bloque PL/SQL a un archivo nombrándolo p18q2.sql
a) En lugar de imprimir el número de departamento obtenido en el e
jercicio 1, sumele 10 a ese número y úselo como el número de departamento
para el departamento nuevo.
b) Use una variable de sustitución de SQL*PLUS para el nombre del
departamento nuevo
c) Deje por ahora con valor NULO la ubicación o localidad del depa
rtamento nuevo (loc)
d) Ejecute el bloque PL/SQL
Por favor ingrese el nombre del departamento: EDUCATION
PL/SQL procedure successfully completed.
e) Muestre el departamento que ha creado
Respuestas: 2.a), 2.b) y 2.c)
-----------------------------
SQL> edit p18q2.sql
Contenido del archivo de comandos con el bloque PL/SQL: p18q2.sq
l
----------------------------------------------------------------
-
"
ACCEPT p_dept_dname PROMPT 'Por favor ingrese el nombre del
departamento:';
DECLARE
v_max_deptno DEPT.DEPTNO%TYPE;
v_dept_deptno DEPT.DEPTNO%TYPE;
v_dept_dname DEPT.DNAME%TYPE;
BEGIN
SELECT MAX( DEPTNO )
INTO v_max_deptno
FROM DEPT;
v_dept_deptno := v_max_deptno + 10;
v_dept_dname := '&p_dept_dname';
INSERT INTO DEPT
VALUES ( v_dept_deptno, v_dept_dname, NULL );
COMMIT;
END;
/
"
Respuesta 2.d)
--------------
SQL> start p18q2.sql
Respuesta 2.e)
--------------
SQL> SELECT DEPTNO, DNAME, LOC
FROM DEPT
WHERE DEPTNO = :G_MAX_DEPTNO + 10;
Ejercicio 3: Cree un bloque PL/SQL que actualice la localidad para un departa
mento existente. Guarde el bloque PL/SQL
a un archivo nombrándolo p18q3.sql
a) Use una variable de sustitución de SQL*PLUS para el número de dep
artamento
b) Use una variable de sustitución de SQL*PLUS para la localidad d
el departamento
c) Testee el Bloque PL/SQL
"Por favor ingrese el número de departamento:
60"
"Por favor ingrese la localidad del departamento:
HOUSTON"
PL/SQL procedure successfully completed.
d) Muestre el número de departamento, el nombre del departamento,
y la localidad para el departamento actualizado.
e) Muestre el departamento que ha actualizado.
Respuestas 3.a), 3.b)
---------------------
SQL> edit p18q3.sql
Contenido del archivo de comandos con el bloque PL/SQL:
-------------------------------------------------------
"
ACCEPT p_dept_deptno PROMPT 'Por favor ingrese el número del d
epartamento: ';
ACCEPT p_dept_loc PROMPT 'Por favor ingrese la localidad
del departamento: ';
DECLARE
v_dept_deptno DEPT.DEPTNO%TYPE;
v_dept_loc DEPT.LOC%TYPE;
BEGIN
v_dept_deptno := &p_dept_deptno;
v_dept_loc := '&p_dept_loc';
UPDATE DEPT
SET loc = v_dept_loc
WHERE deptno = v_dept_deptno;
COMMIT;
END;
/
"
Respuesta 3.c)
--------------
SQL> start p18q3.sql
Respuesta 3.d) y 3.e)
---------------------
SQL> SELECT deptno, dname, loc
FROM DEPT
WHERE deptno = &p_dept_deptno;
Ejercicio 4: Cree un bloque PL/SQL que elimine el departamento creado en el e
jercicio 2. Guarde el bloque PL/SQL a un archivo de comandos nombrándolo
p18q4.sql.
a) Use una variable de sustitución de SQL*PLUS para el número de dep
artamento.
b) Imprima en pantalla el número de registros/filas afectados.
c) Testee el bloque PL/SQL
"Por favor ingrese el número de departamento: 60"
PL/SQL procedure successfully completed.
G_RESULT
--------
1 row(s) deleted.
d) ¿Qué sucede si ingresa un número de departamento que no existe?
"Por favor ingrese el número de departamento: 99"
PL/SQL procedure successfully completed.
G_RESULT
--------
0 row(s) deleted.
e) Verifique que el departamento ha sido eliminado.
no rows selected
Respuestas 4.a) y 4.b)
----------------------
SQL> edit p18q4.sql
Contenido del archivo de comandos con el bloque PL/SQL: p18q4.sq
l
----------------------------------------------------------------
-
"
VARIABLE G_RESULT VARCHAR2(30);
ACCEPT p_dept_deptno PROMPT 'Por favor ingrese el número del d
epartamento: ';
DECLARE
v_dept_deptno DEPT.DEPTNO%TYPE;
BEGIN
v_dept_deptno := &p_dept_deptno;
DELETE FROM DEPT
WHERE deptno = v_dept_deptno;
:G_RESULT := ( SQL%ROWCOUNT || ' registros-fi
las eliminados.' );
COMMIT;
END;
/
PRINT G_RESULT;
"
Respuesta 4.c)
--------------
SQL> start p18q4.sql
Respueta 4.d)
-------------
SQL> start p18q4.sql
"Por favor ingrese el número de departamento: 99"
PL/SQL procedure successfully completed.
G_RESULT
--------
0 row(s) deleted.
Respuesta 4.e)
SQL> SELECT deptno, dname, loc
FROM DEPT
WHERE deptno = 60;
Ninguna fila seleccionada