Uploaded by Harish K

8.31-8.46

advertisement
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;
Download