Salta el contingut

DAM - DAW - MP 0484 Bases de Dades - NF5

Pràctica 1 - Variables

  1. Avalua cadascuna de les següents declaracions. Determina quines no són correctes i per què.

    1. DECLARE v_id INT(4) NOT NULL;

    2. DECLARE v_x, v_y, v_z VARCHAR(10);

    3. DECLARE v_birthdate DATE;

    4. DECLARE 1_in_stock BOOLEAN DEFAULT 1;

    Possible solució

    Només és incorrecta la a ja que la declaració d'una variable no admet NOT NULL.

    La d és correcta tot i que no recomanable que el nom d'una varibale comenci amb un dígit. En altres llengatges no estaria permès.

  2. Per cadascuna de les següents assignacions, indica si són vàlides i de quin tipus és el resultat que té i el de les variables de les expressions.

    1. SET v_days_to_go = v_due_date CURRENT_DATE;

    2. SET v_sender = CONCAT(USER, ': ' , v_dept_no);

    3. SET v_sum = 100,000 + 250,000;

    4. SET v_flag = TRUE;

    5. SET v_n1 = v_n2 > (2 * v_n3);

    6. SET v_value = NULL;

    Possible solució
    1. SET v_days_to_go = v_due_date CURRENT_DATE;

      Incorrecte: no es poden restar dues dates. Resultat impredecible.

    2. SET v_sender = CONCAT(USER, ': ' , v_dept_no);

      Incorrecte: USER és una funció i necessita (). Serà un VARCHAR.

    3. SET v_sum = 100,000 + 250,000;

      Incorrecte: els decimals van amb . I els milers no es posen.

    4. SET v_flag = TRUE;

      Correcte. Resultat BOOLEAN.

    5. SET v_n1 = v_n2 > (2 * v_n3);

      Correcte. Resultat BOOLEAN.

    6. SET v_value = NULL;

      Correcte. Resultat del tipus de la variable.

  3. Crea un bloc anònim Per mostrar la frase “Extensió Procedimental en MariaDB”.

    MISSATGE
    Extensió Procedimental en MariaDB
    
    Possible solució
    DELIMITER //
    BEGIN NOT ATOMIC
        SELECT 'Extensió Procedimental en MariaDB' AS MISSATGE;
    END //
    DELIMITER ;
    
  4. Crea un bloc que declari dues variables. Assigna a aquestes variables el valor d’algunes variables d'usuari declarades en el teu mysql (@) i mostra el contingut de les variables declarades al bloc de codi. Pots guardar el teu script en un fitxer anomenat p01q04.sql, i executar-lo amb la comanda source

    Variables d'usuari: @v1 "La resposta és 42"

    Variables del bloc anònim

    V_CHAR  Caracter (de longitud variable, màxim 25)
    V_NUM   Nombre enter
    
    Assigna valor a les variables:

    Variable Valor
    V_CHAR El literal 'La resposta és 42'
    V_NUM Els dos darrers caràcters de V_CHAR passats a numèric
    Caràcter Nombre
    La resposta és 42 42
    Possible solució
    DELIMITER ;
    SET @v1 = 'La resposta es 42';
    DELIMITER //
    BEGIN NOT ATOMIC
        DECLARE v_char VARCHAR(100);
        DECLARE v_num INT;
    
        SET v_char = @v1;
        SET v_num = RIGHT(v_char, 2);
    
        SELECT v_char AS "Caràcter", v_num AS "Nombre";
    END;
    //
    DELIMITER ;
    

Pràctica 2 – Bloc d’extensió procedimental

DELIMITER //
BEGIN NOT ATOMIC
    DECLARE v_weight INT(3) DEFAULT 600;
    DECLARE v_message VARCHAR(255) DEFAULT 'Product 10012';
    BEGIN
        DECLARE v_weight    INT(3) DEFAULT 1;
        DECLARE v_message   VARCHAR(255) DEFAULT 'Product 11001';
        DECLARE v_new_locn VARCHAR(50) DEFAULT 'Europe';
            SET v_weight = v_weight + 1;
            SET v_new_locn = CONCAT('Western ', v_new_locn);
            -- 1 Atenció a aquest lloc
    END;
    SET v_weight = v_weight + 1;
    SET v_message = CONCAT(v_message, ' is in stock');
    -- 2 Atenció a aquest lloc
END;
//
DELIMITER ;
  1. Avalua el codi que hi ha a dalt i determina el tipus i el valor de cada variable segons el lloc on estan declarades i utilitzades.

    1. El valor de V_WEIGHT al lloc 1 és:
    2. El valor de V_MESSAGE al lloc 1 és:
    3. El valor de V_NEW_LOCN al lloc 1 és:
    4. El valor de V_WEIGHT al lloc 2 és:
    5. El valor de V_MESSAGE al lloc 2 és:
    6. El valor de V_NEW_LOCN al lloc 2 és:
    Possible solució
    1. El valor de V_WEIGHT al lloc 1 és: 2
    2. El valor de V_MESSAGE al lloc 1 és: Product 11001
    3. El valor de V_NEW_LOCN al lloc 1 és: Western Europe
    4. El valor de V_WEIGHT al lloc 2 és: 601
    5. El valor de V_MESSAGE al lloc 2 és: Product 10012 is in stock
    6. El valor de V_NEW_LOCN al lloc 2 és: No està definida en aquest espai.
  2. Llegeix el següent codi.

    DELIMITER //
    BEGIN NOT ATOMIC
        DECLARE v_customer VARCHAR(50) DEFAULT 'Womansport';
        DECLARE v_credit_rating VARCHAR(50) DEFAULT 'EXCELLENT';
        BEGIN
            DECLARE v_customer INT(7) DEFAULT 201;
            DECLARE v_name VARCHAR(25) DEFAULT 'Unisports';
            -- v_customer   v_name  v_credit_rating
        END;
        -- v_customer   v_name  v_credit_rating
    END;
    //
    DELIMITER ;
    
    Hem declarat dues variables, v_customer i v_credit_rating, en el bloc principal. També hem declarat dues variables , v_customer i v_name, al subbloc. Determina el valor i el tipus de cadascuna d’elles en els següents casos:

    1. El valor de v_customer en el subbloc és:
    2. El valor de v_name en el subbloc és:
    3. El valor de v_credit_rating en el subbloc és:
    4. El valor de v_customer en el bloc principal és:
    5. El valor de v_name en el bloc principal és:
    6. El valor de v_credit_rating en el bloc principal és:
    Possible solució
    1. El valor de v_customer en el subbloc és: 201 INT(7)
    2. El valor de v_name en el subbloc és: Unisports VARCHAR(25)
    3. El valor de v_credit_rating en el subbloc és: EXCELLENT VARCHAR(50)
    4. El valor de v_customer en el bloc principal és: Womansport VARCHAR(50)
    5. El valor de v_name en el bloc principal és: No està definida en aquest espai.
    6. El valor de v_credit_rating en el bloc principal és: EXCELLENT VARCHAR(50)