DAM - DAW - MP 0484 Bases de Dades - NF5
Pràctica 1 - Variables
-
Avalua cadascuna de les següents declaracions. Determina quines no són correctes i per què.
-
DECLARE v_id INT(4) NOT NULL; -
DECLARE v_x, v_y, v_z VARCHAR(10); -
DECLARE v_birthdate DATE; -
DECLARE 1_in_stock BOOLEAN DEFAULT 1;
Possible solució
Només és incorrecta la
aja que la declaració d'una variable no admetNOT 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. -
-
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.
-
SET v_days_to_go = v_due_date – CURRENT_DATE; -
SET v_sender = CONCAT(USER, ': ' , v_dept_no); -
SET v_sum = 100,000 + 250,000; -
SET v_flag = TRUE; -
SET v_n1 = v_n2 > (2 * v_n3); -
SET v_value = NULL;
Possible solució
-
SET v_days_to_go = v_due_date – CURRENT_DATE;Incorrecte: no es poden restar dues dates. Resultat impredecible.
-
SET v_sender = CONCAT(USER, ': ' , v_dept_no);Incorrecte: USER és una funció i necessita (). Serà un
VARCHAR. -
SET v_sum = 100,000 + 250,000;Incorrecte: els decimals van amb
.I els milers no es posen. -
SET v_flag = TRUE;Correcte. Resultat
BOOLEAN. -
SET v_n1 = v_n2 > (2 * v_n3);Correcte. Resultat
BOOLEAN. -
SET v_value = NULL;Correcte. Resultat del tipus de la variable.
-
-
Crea un bloc anònim Per mostrar la frase “Extensió Procedimental en MariaDB”.
MISSATGE Extensió Procedimental en MariaDBPossible solució
DELIMITER // BEGIN NOT ATOMIC SELECT 'Extensió Procedimental en MariaDB' AS MISSATGE; END // DELIMITER ; -
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 anomenatp01q04.sql, i executar-lo amb la comandasourceVariables d'usuari:
@v1 "La resposta és 42"Variables del bloc anònim
Assigna valor a les variables:V_CHAR Caracter (de longitud variable, màxim 25) V_NUM Nombre enterVariable 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 ;
-
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.
- El valor de
V_WEIGHTal lloc 1 és: - El valor de
V_MESSAGEal lloc 1 és: - El valor de
V_NEW_LOCNal lloc 1 és: - El valor de
V_WEIGHTal lloc 2 és: - El valor de
V_MESSAGEal lloc 2 és: - El valor de
V_NEW_LOCNal lloc 2 és:
Possible solució
- El valor de
V_WEIGHTal lloc 1 és: 2 - El valor de
V_MESSAGEal lloc 1 és: Product 11001 - El valor de
V_NEW_LOCNal lloc 1 és: Western Europe - El valor de
V_WEIGHTal lloc 2 és: 601 - El valor de
V_MESSAGEal lloc 2 és: Product 10012 is in stock - El valor de
V_NEW_LOCNal lloc 2 és: No està definida en aquest espai.
- El valor de
-
Llegeix el següent codi.
Hem declarat dues variables,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 ;v_customeriv_credit_rating, en el bloc principal. També hem declarat dues variables ,v_customeriv_name, al subbloc. Determina el valor i el tipus de cadascuna d’elles en els següents casos:- El valor de
v_customeren el subbloc és: - El valor de
v_nameen el subbloc és: - El valor de
v_credit_ratingen el subbloc és: - El valor de
v_customeren el bloc principal és: - El valor de
v_nameen el bloc principal és: - El valor de
v_credit_ratingen el bloc principal és:
Possible solució
- El valor de
v_customeren el subbloc és: 201INT(7) - El valor de
v_nameen el subbloc és: UnisportsVARCHAR(25) - El valor de
v_credit_ratingen el subbloc és: EXCELLENTVARCHAR(50) - El valor de
v_customeren el bloc principal és: WomansportVARCHAR(50) - El valor de
v_nameen el bloc principal és: No està definida en aquest espai. - El valor de
v_credit_ratingen el bloc principal és: EXCELLENTVARCHAR(50)
- El valor de