Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T3»

De wikiserver
Dreceres ràpides: navegació, cerca
(T3- Solución : Escritura de sentencias ejecutables)
 
(Hi ha 15 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
*'''Exercici 1'''
+
==T3- Solución : Escritura de sentencias ejecutables==
  
:Avalua les següents declaracions de variables determinant quines no son correctes (donen error), explica perquè.
+
En esta práctica, examinará y escribirá sentencias ejecutables.
  
::a) DECLARE v_id NUMBER(4);
+
[[Imatge:m2uf3_ese_1.png |600px|center| Escritura sentencias ejecutables]]
  
    Exercici 1
 
  
    Avalua les següents declaracions de variables determinant quines no son correctes (donen error), explica perquè.  
+
1) Evalúe el bloque PL/SQL anterior y determine tanto el tipo de dato como el valor de cada una de las siguientes variables, según las reglas de los ámbitos.
  
        a) DECLARE v_id NUMBER(4);
+
:a) El valor de v_weight en la posición 1 es:
  
    Correcte.
+
::'''2'''
 +
::'''El tipo de dato es NUMBER.'''
  
        b) DECLARE v_x, v_y,v_z VARCHAR2(10);
+
:b) El valor de v_new_locn en la posición 1 es:
  
    Incorrecte, perquè només es permet un identificador per declaració.
+
::'''Western Europe'''
 +
::'''El tipo de dato es VARCHAR2.'''
  
        c) DECLARE v_data_naixament DATE NOT NULL;
+
:c) El valor de v_weight en la posición 2 es:
  
    Incorrecte, perquè una variable NOT NULL ha d'inicialitzar-se.
+
::'''601'''
 +
::'''El tipo de dato es NUMBER.'''
  
        d) DECLARE v_en_stock BOOLEAN :=1
+
:d) El valor de v_message en la posición 2 es:
  
    Incorrecte, perquè 1 no és una expressió booleana.
+
::'''Product 10012 is in stock'''
 +
::'''El tipo de dato es VARCHAR2.'''
  
    Exercici 2  
+
:e) El valor de v_new_locn en la posición 2 es:
  
    Determina el tipus de dades de les expressions resultants en les següents assignacions
+
::'''No válido porque v_new_locn no es visible fuera del subbloque'''
  
        a) v_dies_que_falten := v_date - SYSDATE;
+
[[Imatge:M2UF3_ESE_2.png |600px|center| Escriptura de Sentències Executables]]
  
    Number 
+
'''2)''' En el bloc anterior, determina el valor i el tipus de dada en cada un dels següents cassos:
  
        b) v_sender := USER || ':' || TO_CHAR(v_deptno);
+
:a) Valor de v_customer en el bloc anidat:
  
    Caràcter
 
  
        c) v_sum := $100,000+$250,000
+
::'''201'''
 +
::'''El tipo de dato es NUMBER.'''
  
    Incorrecte. No es poden convertir símbols especials de VARCHAR2 a NUMBER
+
:b) Valor de v_name en el bloc anidat:
  
        d) v_bandera := TRUE
+
::'''Unisports'''
 +
::'''El tipo de dato es VARCHAR2.'''
  
    Booelan
+
:c) Valor de v_credit_rating en el bloc anidat:
  
        e) v_n1 := v_n2 > (2*v_n3);
+
::'''GOOD'''
 +
::'''El tipo de dato es VARCHAR2.'''
  
    Boolean
+
:d) Valor de v_customer en el bloc principal:
  
        f) v_valor := NULL;
+
::'''Womansport'''
 +
::'''El tipo de dato es VARCHAR2.'''
  
    Qualsevol tipus d'escalar.
+
:e) Valor de v_name en el bloc principal:
  
    Exercici 3
+
'''No valid. No és visible en aquest punt.'''
  
    Crea un bloc anònim per imprimir la frase “Benvingut a PL/SQL”
+
:f) Valor de v_credit_rating en el bloc principal:
  
VARIABLE g_message VARCHAR2(30)
+
::'''GOOD'''
BEGIN
+
::'''El tipo de dato es VARCHAR2.'''
  :g_message := 'My PL/SQL Block Works';
 
END;
 
/
 
PRINT g_message
 
  
G_MESSAGE
 
---------------------------------------------------------
 
My PL/SQL Block Works   
 
  
    Exercici 4
+
3) Utilice la misma sesión que utilizó para ejecutar las prácticas de la lección titulada “Declaración de Variables PL/SQL”. Si ha abierto una nueva sesión, ejecute lab_02_05_soln.sql. A continuación, edite lab_02_05_soln.sql de la siguiente forma:
  
    Crea un bloc que declari dues variables. Assigneu el valor d'aquestes variables PL/SQL a variables SQL*PLUS i imprimeix el valor d'aquestes dues variables per pantalla. Guarda el bloc PL/SQL en un arxiu anomenat p2q4.spl.
+
:a) Con la sintaxis de comentarios de una sola línea, comente las líneas que crean las variables de enlace y active SERVEROUTPUT.
 +
<pre>
 +
  -- VARIABLE b_basic_percent NUMBER
 +
  -- VARIABLE b_pf_percent NUMBER
 +
  SET SERVEROUTPUT ON
 +
</pre>
  
            V_CHAR Character (variable length)  
+
:b) Con los comentarios de varias líneas, comente en la sección ejecutable las líneas que asignan valores a las variables de enlace.
 +
<pre>
 +
  /*:b_basic_percent:=45;
 +
  :b_pf_percent:=12;*/
 +
</pre>
  
            V_Number
+
:c) En la sección de declaraciones:
  
        Assigna els següents valors a les variables:
+
::1. Declare e inicialice dos variables temporales para sustituir las variables de enlace comentadas.
  
            Variable Value
+
::2. Declare dos variables adicionales: v_fname del tipo VARCHAR2 y tamaño 15, y v_emp_sal del tipo NUMBER y tamaño 10.
            --------- ---------------------------------------------
+
<pre>
            V_CHAR The literal '42 is the answer'
+
  DECLARE
            V_NUM The first two characters form V_CHAR
+
    v_basic_percent NUMBER:=45;
 +
    v_pf_percent NUMBER:=12;
 +
    v_fname VARCHAR2(15);
 +
    v_emp_sal NUMBER(10);
 +
</pre>
  
VARIABLE g_char VARCHAR2(30)
+
:d) Incluya la siguiente sentencia SQL en la sección ejecutable:
VARIABLE g_num NUMBER
+
<pre>
DECLARE
+
  SELECT first_name, salary INTO v_fname, v_emp_sal
  v_char VARCHAR2(30);
+
  FROM employees WHERE employee_id=110;
  v_num NUMBER;
+
</pre>
BEGIN
+
 
  v_char := '42 is the answer';
+
:e) Cambie la línea que imprime “Hello World” para que imprima “Hello” y el nombre. A continuación, comente las líneas que muestran las fechas e imprimen las
  v_num := TO_NUMBER(SUBSTR(v_char,1,2));
+
variables de enlace.
  :g_char := v_char;
+
<pre>
  :g_num := v_num;
+
  DBMS_OUTPUT.PUT_LINE(' Hello '|| v_fname);
END;
+
  /*DBMS_OUTPUT.PUT_LINE('TODAY IS : '|| v_today);
/
+
  DBMS_OUTPUT.PUT_LINE('TOMORROW IS : ' || v_tomorrow);*/
PRINT g_char
+
  ...
PRINT g_num
+
  ...
 +
  /
 +
  --PRINT b_basic_percent
 +
  --PRINT b_basic_percent
 +
</pre>
 +
 
 +
:f) Calcule la aportación del empleado al fondo de previsión (PF). PF es el 12% del salario básico, y el salario básico es el 45% del salario. Utilice
 +
las variables locales para el cálculo. Intente utilizar sólo una expresión para calcular el valor de PF. Imprima el salario del empleado y su aportación a PF.
 +
<pre>
 +
    DBMS_OUTPUT.PUT_LINE('YOUR SALARY IS : '||v_emp_sal);
 +
    DBMS_OUTPUT.PUT_LINE('YOUR CONTRIBUTION TOWARDS PF:'||v_emp_sal*v_basic_percent/100*v_pf_percent/100);
 +
  END;
 +
</pre>
 +
 
 +
:g) Ejecute y guarde el script como lab_03_03_soln.sql. La salida de ejemplo es la siguiente:
 +
 
 +
[[Imatge:m2uf3_ese_2.png |300px|center| Escritura sentencias ejecutables]]

Revisió de 17:04, 22 feb 2019

T3- Solución : Escritura de sentencias ejecutables

En esta práctica, examinará y escribirá sentencias ejecutables.

Escritura sentencias ejecutables


1) Evalúe el bloque PL/SQL anterior y determine tanto el tipo de dato como el valor de cada una de las siguientes variables, según las reglas de los ámbitos.

a) El valor de v_weight en la posición 1 es:
2
El tipo de dato es NUMBER.
b) El valor de v_new_locn en la posición 1 es:
Western Europe
El tipo de dato es VARCHAR2.
c) El valor de v_weight en la posición 2 es:
601
El tipo de dato es NUMBER.
d) El valor de v_message en la posición 2 es:
Product 10012 is in stock
El tipo de dato es VARCHAR2.
e) El valor de v_new_locn en la posición 2 es:
No válido porque v_new_locn no es visible fuera del subbloque
Escriptura de Sentències Executables

2) En el bloc anterior, determina el valor i el tipus de dada en cada un dels següents cassos:

a) Valor de v_customer en el bloc anidat:


201
El tipo de dato es NUMBER.
b) Valor de v_name en el bloc anidat:
Unisports
El tipo de dato es VARCHAR2.
c) Valor de v_credit_rating en el bloc anidat:
GOOD
El tipo de dato es VARCHAR2.
d) Valor de v_customer en el bloc principal:
Womansport
El tipo de dato es VARCHAR2.
e) Valor de v_name en el bloc principal:

No valid. No és visible en aquest punt.

f) Valor de v_credit_rating en el bloc principal:
GOOD
El tipo de dato es VARCHAR2.


3) Utilice la misma sesión que utilizó para ejecutar las prácticas de la lección titulada “Declaración de Variables PL/SQL”. Si ha abierto una nueva sesión, ejecute lab_02_05_soln.sql. A continuación, edite lab_02_05_soln.sql de la siguiente forma:

a) Con la sintaxis de comentarios de una sola línea, comente las líneas que crean las variables de enlace y active SERVEROUTPUT.
   -- VARIABLE b_basic_percent NUMBER
   -- VARIABLE b_pf_percent NUMBER
   SET SERVEROUTPUT ON
b) Con los comentarios de varias líneas, comente en la sección ejecutable las líneas que asignan valores a las variables de enlace.
   /*:b_basic_percent:=45;
   :b_pf_percent:=12;*/
c) En la sección de declaraciones:
1. Declare e inicialice dos variables temporales para sustituir las variables de enlace comentadas.
2. Declare dos variables adicionales: v_fname del tipo VARCHAR2 y tamaño 15, y v_emp_sal del tipo NUMBER y tamaño 10.
   DECLARE
     v_basic_percent NUMBER:=45;
     v_pf_percent NUMBER:=12;
     v_fname VARCHAR2(15);
     v_emp_sal NUMBER(10);
d) Incluya la siguiente sentencia SQL en la sección ejecutable:
   SELECT first_name, salary INTO v_fname, v_emp_sal
   FROM employees WHERE employee_id=110;
e) Cambie la línea que imprime “Hello World” para que imprima “Hello” y el nombre. A continuación, comente las líneas que muestran las fechas e imprimen las

variables de enlace.

   DBMS_OUTPUT.PUT_LINE(' Hello '|| v_fname);
   /*DBMS_OUTPUT.PUT_LINE('TODAY IS : '|| v_today);
   DBMS_OUTPUT.PUT_LINE('TOMORROW IS : ' || v_tomorrow);*/
   ...
   ...
   /
   --PRINT b_basic_percent
   --PRINT b_basic_percent
f) Calcule la aportación del empleado al fondo de previsión (PF). PF es el 12% del salario básico, y el salario básico es el 45% del salario. Utilice

las variables locales para el cálculo. Intente utilizar sólo una expresión para calcular el valor de PF. Imprima el salario del empleado y su aportación a PF.

     DBMS_OUTPUT.PUT_LINE('YOUR SALARY IS : '||v_emp_sal);
     DBMS_OUTPUT.PUT_LINE('YOUR CONTRIBUTION TOWARDS PF:'||v_emp_sal*v_basic_percent/100*v_pf_percent/100);
   END;
g) Ejecute y guarde el script como lab_03_03_soln.sql. La salida de ejemplo es la siguiente:
Escritura sentencias ejecutables