------------------------------ 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; "