Problem 31 Create a trigger named trg_line_total to write the LINE_TOTAL value in the LINE table every time you add a new LINE row. (The LINE_TOTAL value is the product of the LINE_UNITS and LINE_PRICE values.) Answer: DROP TRIGGER IF EXISTS trg_line_total; CREATE TRIGGER trg_line_total BEFORE INSERT ON LINE FOR EACH ROW SET NEW.LINE_TOTAL = NEW.LINE_UNITS * NEW.LINE_PRICE; Problem 32 Create a trigger named trg_line_prod that automatically updates the quantity on hand for each product sold after a new LINE row is added. Answer: DROP TRIGGER IF EXISTS trg_line_prod; CREATE TRIGGER trg_line_prod AFTER INSERT ON LINE FOR EACH ROW UPDATE PRODUCT SET P_QOH = NEW.LINE_UNITS WHERE P_CODE = NEW.P_CODE; Problem 33 Create a stored procedure named prc_inv_amounts to update the INV_SUBTOTAL, INV_TAX, and INV_TOTAL. The procedure takes the invoice number as a parameter. The INV_SUBTOTAL is the sum of the LINE_TOTAL amounts for the invoice, the INV_TAX is the product of the INV_SUBTOTAL and the tax rate (8 percent), and the INV_TOTAL is the sum of the INV_SUBTOTAL and the INV_TAX. Answer: DROP PROCEDURE IF EXISTS prc_inv_amounts; CREATE PROCEDURE prc_inv_amounts(IN INV_NUM INT) BEGIN DECLARE SUBTOTAL INT DEFAULT 0; DECLARE TAX FLOAT DEFAULT 0; SELECT SUM(LINE_TOTAL) INTO SUBTOTAL FROM LINE WHERE INV_NUMBER = INV_NUM; SET TAX = 0.8 * SUBTOTAL; UPDATE INVOICE SET INV_SUBTOTAL = SUBTOTAL , INV_TAX = TAX , INV_TOTAL = SUBTOTAL + TAX WHERE INV_NUMBER = INV_NUM; END; Problem 35 Modify the MODEL table to add the attribute shown in the following table. MOD_WAIT_CHG should support up to 5 digits to the left of the decimal place and 2 digits to the right of the decimal place.. ALTER TABLE MODEL ADD COLUMN MOD_WAIT_CHG NUMERIC(5,2); Problem 36 Write the queries to update the MOD_WAIT_CHG attribute values based on Problem 35. UPDATE MODEL SET MOD_WAIT_CHG = 100 WHERE MOD_CODE = 'C-90A'; UPDATE MODEL SET MOD_WAIT_CHG = 50 WHERE MOD_CODE = 'PA23-250'; UPDATE MODEL SET MOD_WAIT_CHG = 75 WHERE MOD_CODE = 'PA31-350'; Problem 37 Modify the CHARTER table to add the attributes shown in the following table. Use the following precision for each row: Attribute Name Attribute Precision CHAR_WAIT_CHG 6,2 CHAR_FLT_CHG_HR 6,2 CHAR_FLT_CHG 10,2 Attribute Name Attribute Precision CHAR_TAX_CHG 6,2 CHAR_TOT_CHG 10,2 CHAR_PYMT 10,2 CHAR_BALANCE 10,2 ALTER TABLE CHARTER ADD COLUMN CHAR_WAIT_CHG NUMERIC(6,2); ALTER TABLE CHARTER ADD COLUMN CHAR_FLT_CHG_HR NUMERIC(6,2); ALTER TABLE CHARTER ADD COLUMN CHAR_FLT_CHG NUMERIC(10,2); ALTER TABLE CHARTER ADD COLUMN CHAR_TAX_CHG NUMERIC(6,2); ALTER TABLE CHARTER ADD COLUMN CHAR_TOT_CHG NUMERIC(10,2); ALTER TABLE CHARTER ADD COLUMN CHAR_PYMT NUMERIC(10,2); ALTER TABLE CHARTER ADD COLUMN CHAR_BALANCE NUMERIC(10,2); Problem 38 Write the sequence of commands required to update the CHAR_WAIT_CHG attribute values in the CHARTER table. DROP PROCEDURE IF EXISTS PRC_CHR_UPDATE; CREATE PROCEDURE PRC_CHR_UPDATE (CHARWAITCHG NUMERIC(6,2), MODCODE VARCHAR(10)) UPDATE CHARTER C JOIN AIRCRAFT A ON C.AC_NUMBER = A.AC_NUMBER SET CHAR_WAIT_CHG = CHARWAITCHG WHERE MOD_CODE = MODCODE; CALL PRC_CHR_UPDATE(100, 'C-90A'); CALL PRC_CHR_UPDATE(50, 'PA23-250'); CALL PRC_CHR_UPDATE(75, 'PA31-350'); Problem 39 Write the sequence of commands required to update the CHAR_FLT_CHG_HR attribute values in the CHARTER table. UPDATE CHARTER C JOIN AIRCRAFT A ON C.AC_NUMBER = A.AC_NUMBER JOIN MODEL M ON M.MOD_CODE = A.MOD_CODE SET CHAR_FLT_CHG_HR = MOD_CHG_MILE Problem 40 Write the command required to update the CHAR_FLT_CHG attribute values in the CHARTER table. UPDATE CHARTER SET CHAR_FLT_CHG = CHAR_HOURS_FLOWN * CHAR_FLT_CHG_HR; Problem 41 Write the command required to update the CHAR_TAX_CHG attribute values in the CHARTER table. UPDATE CHARTER SET CHAR_TAX_CHG = CHAR_FLT_CHG * 0.08; Problem 42 Write the command required to update the CHAR_TOT_CHG attribute values in the CHARTER table. UPDATE CHARTER SET CHAR_TOT_CHG = ; Problem 43 Modify the PILOT table to add the attribute shown in the following table, with a precision and scale of (8,2). ALTER TABLE PILOT ADD COLUMN PIL_PIC_HRS NUMERIC(8,2); Problem 44 Create a trigger named trg_char_hours that automatically updates the AIRCRAFT table when a new CHARTER row is added. Use the CHARTER table’s CHAR_HOURS_FLOWN to update the AIRCRAFT table’s AC_TTAF, AC_TTEL, and AC_TTER values. (Hint: use temp values, as the INSERT event does not accept the OLD keyword.) DROP TRIGGER IF EXISTS trg_char_hours; CREATE TRIGGER trg_char_hours AFTER INSERT ON CHARTER FOR EACH ROW UPDATE AIRCRAFT SET AC_TTAF = AC_TTAF + NEW.CHAR_HOURS_FLOWN, AC_TTEL = AC_TTEL + NEW.CHAR_HOURS_FLOWN, AC_TTER = AC_TTER + NEW.CHAR_HOURS_FLOWN WHERE AC_NUMBER = NEW.AC_NUMBER; Problem 45 Create a trigger named trg_pic_hours that automatically updates the PILOT table when a new CREW row is added and the CREW table uses a Pilot CREW_JOB entry. Use the CHARTER table’s CHAR_HOURS_FLOWN to update the PILOT table’s PIL_PIC_HRS only when the CREW table uses a Pilot CREW_JOB entry. DROP TRIGGER IF EXISTS trg_pic_hours; CREATE TRIGGER trg_pic_hours AFTER INSERT ON CREW FOR EACH ROW IF (NEW.CREW_JOB = 'PILOT') THEN UPDATE PILOT SET PIL_PIC_HRS = PIL_PIC_HRS + (SELECT CHAR_HOURS_FLOWN FROM CHARTER WHERE CHAR_TRIP = NEW.CHAR_TRIP) WHERE EMP_NUM = NEW.EMP_NUM; END IF; Problem 46 Create a trigger named trg_cust_balance that automatically updates the CUSTOMER table’s CUS_BALANCE when a new CHARTER row is added. Use the CHARTER table’s CHAR_TOT_CHG as the update source. (Assume that all charter charges are charged to the customer balance.) DROP TRIGGER IF EXISTS trg_cust_balance; CREATE TRIGGER trg_cust_balance AFTER INSERT ON CHARTER FOR EACH ROW UPDATE CUSTOMER SET CUS_BALANCE = CUS_BALANCE + NEW.CHAR_TOT_CHG WHERE CUS_CODE = NEW.CUS_CODE;