Sunteți pe pagina 1din 4

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

Práctica 17: Escribiendo Sentencias Ejecutables


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

Bloque PL/SQL del Ejercicio 1:


------------------------------
DECLARE
v_weight NUMBER(3) := 600;
v_message VARCHAR2(255) := 'Product 10012';
BEGIN
/* SUB-BLOQUE */
DECLARE
v_weight NUMBER(3) := 1;
v_message VARCHAR2(255) := 'Product 11001';
v_new_locn VARCHAR2(50) := 'Europe';
BEGIN
v_weight := v_weight + 1;
v_new_locn := 'Western ' || v_new_locn;
END;
v_weight := v_weight + 1;
v_message := v_message || ' is in stock';
v_new_locn := 'Western ' || v_new_locn;
END;
Ejercicio 1:
Evalúe el bloque PL/SQL de arriba y determine el tipo de dato y el valor d
e las variables siguientes
de acuerdo a las reglas de ámbito.
a) El valor de v_weight en el sub-bloque es: Respuest
a 1.a: Escalar numérico (NUMBER) con valor 2
b) El valor de v_new_locn en el sub-bloque es: Respuest
a 1.b: Escalar cadena de caracteres (VARCHAR2) con valor 'Western Europe'
c) El valor de v_weight en el bloque principal es: Respuest
a 1.c: Escalar numérico (NUMBER) con valor 601
d) El valor de v_message en el bloque principal es: Respuest
a 1.d: Escalar cadena de caracteres (VARCHAR2) con valor 'Product 10012 is in st
ock'
e) El valor de v_new_locn en el bloque principal es: Respuest
a 1.e: EL BLoque Principal no puede ver la variable v_new_locn declarada en el S
ub-bloque.
Bloque PL/SQL del Ejercicio 2:
------------------------------
DECLARE
v_customer VARCHAR2(50) := 'Womansport';
v_credit_rating VARCHAR2(50) := 'EXCELENT';
BEGIN
DECLARE
v_customer NUMBER(7) := 201;
v_name VARCHAR2(25) := 'Unisport';
BEGIN
v_customer v_name v_credit_rating
END;
v_customer v_name v_credit_rating
END;
Ejercicio 2: Suponga que incrusta un sub-bloque dentro de un bloque, como se
muestra arriba.
Declara dos variables, v_customer y v_credit_rating en el bloque
principal.
También declara dos variables v_customer y v_name en el sub-bloque
.
Determine los valores y los tipos de datos para cada uno de los
casos siguientes:
a) El valor de v_customer en el sub-bloque es:
Respuesta 2.a: Escalar numérico (NUMBER) con el valor 201
b) El valor de v_name en el sub-bloque es:
Respuesta 2.b: Escalar cadena de caracteres (VARCHAR2) con el valor 'Unisport'
c) El valor de v_credit_rating en el sub-bloque es:
Respuesta 2.c: Escalar cadena de caracteres (VARCHAR2) con el valor 'EXCELENT'
d) El valor de v_customer en el bloque principal es:
Respuesta 2.d: Escalar cadena de caracteres (VARCHAR2) con el valor 'Womansport'
e) El valor de v_name en el bloque principal es:
Respuesta 2.e: No se puede ver el valor de v_name desde el bloque principal.
f) El valor de v_credit_rating en el bloque principal es:
Respuesta 2.f: Escalar cadena de caracteres (VARCHAR2) con el valor 'EXCELENT'
Ejercicio 3: Cree y ejecute un bloque PL/SQL que acepte dos números a través de v
ariables de sustitución de SQL*PLUS.
El primer número debería ser dividido por el segundo número y debería su
marle a ese resultado el segundo número.
El resultado final debería ser almacenado en una variable PL/SQL e
impreso en pantalla, o el resultado debería ser
escrito a una variable SQL*PLUS e impreso en pantalla.
3.a) Cuando se usa la variable PL/SQL
Por favor ingrese el primer número: 2
Por favor ingrese el segundo número: 4
4.5
PL/SQL procedure successfully completed.
3.b) Cuando se usa la variable SQL*PLUS
Por favor ingrese el primer número: 2
Por favor ingrese el segundo número: 4
PL/SQL procedure successfully completed.
G_RESULT
--------
4.5
Respuesta 3.a)
Contenido del archivo de comandos: p17q3a.sql según Apéndice A-60
----------------------------------------------------------------
-
"
SET SERVEROUTPUT ON
ACCEPT p_num1 PROMPT 'Por favor ingrese el pri
mer número: ';
ACCEPT p_num2 PROMPT 'Por favor ingrese el seg
undo número: ';
DECLARE
v_num1 NUMBER(9,2) := &p_num1;
v_num2 NUMBER(9,2) := &p_num2;
v_res NUMBER(9,2);
BEGIN
v_res := (v_num1/v_num2) + v_num2;
/* Imprimiendo la variable PL/SQL */
DBMS_OUTPUT.PUT_LINE(v_res);
END;
/
SET SERVEROUTPUT OFF
"
Respuesta 3.b)
Contenido del archivo de comandos: p17q3b.sql
---------------------------------------------
"
VARIABLE g_res NUMBER;
ACCEPT p_num1 PROMPT 'Por favor ingrese el pri
mer número: ';
ACCEPT p_num2 PROMPT 'Por favor ingrese el seg
undo número: ';
DECLARE
v_num1 NUMBER(9,2) := &p_num1;
v_num2 NUMBER(9,2) := &p_num2;
BEGIN
:g_res := (v_num1/v_num2) + v_num2;
END;
/
PRINT g_res;
"
Ejercicio 4: Construya un bloque PL/SQL que compute la compensación total para
un año. El salario anual y el porcentaje de bono anual
son pasados al bloque PL/SQL a través de variables de sustitución de
SQL*PLUS, y el bono requiere una conversión desde
número entero a decimal (por ejemplo 15 a .15). Si el salario es N
ULL póngale un cero antes de computar la compensación total.
Ejecute el bloque PL/SQL. Recordatorio: Use la función NVL para ma
nejar los valores NULOS.
Nota: Para testear la función NVL ingrese NULL en la pantalla de i
ngreso de datos: presionando ENTER resulta en un error de expresión perdida.
Por favor ingrese el monto del salario: 50000
Por favor ingrese el porcentaje del bono: 10
PL/SQL procedure successfully completed.
G_TOTAL
-------
55000
Respuesta 4)
Contenido del archivo de comandos: p17q4.sql
--------------------------------------------
"
VARIABLE g_total NUMBER;
ACCEPT p_sal PROMPT 'Por favor ingrese el mon
to del salario: ';
ACCEPT p_bono PROMPT 'Por favor ingrese el por
centaje del bono: ';
DECLARE
v_sal NUMBER(9,2) := NVL( &p_sal, 0 );
v_bono NUMBER(9,2) := NVL( &p_bono, 0 );
BEGIN
v_bono := v_bono / 100;
:g_total := v_sal + (v_sal * v_bono);
END;
/
PRINT g_total;
"

S-ar putea să vă placă și