More on IF statements Use speaker notes for additional information!
-
Upload
jason-hodge -
Category
Documents
-
view
223 -
download
2
Transcript of More on IF statements Use speaker notes for additional information!
PL/SQL - IFPL/SQL - IF
BEGIN SELECT yrgoal, state INTO v_yrgoal, v_state FROM donornew WHERE idno = v_idno; IF v_state = 'MA' THEN IF v_yrgoal > 300 THEN v_newgoal := v_yrgoal * 1.3; ELSE IF v_yrgoal > 100 THEN v_newgoal := v_yrgoal * 1.2; ELSE v_newgoal := v_yrgoal * 1.1; END IF; END IF; ELSE IF v_state = 'RI' THEN IF v_yrgoal > 250 THEN v_newgoal := v_yrgoal * 1.25; ELSE v_newgoal := v_yrgoal * 1.15; END IF; ELSE v_newgoal := v_yrgoal; END IF; END IF; UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno; COMMIT; END;/SET VERIFY ON
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal NUMBER(7,2); v_newgoal NUMBER(7,2); v_state VARCHAR2(2);
This is the code for donor2 as it appears in the editor (shown in two columns for space considerations).
This code uses a complex IF structure with IF statements embedded in other IF statements. The flowchart for the logic is shown on the next slide.
PL/SQL - IFPL/SQL - IF
v_state = MA
v_yrgoal > 300
v_newgoal := v_yrgoal * 1.3v_yrgoal > 100
v_newgoal := v_yrgoal * 1.2
v_newgoal := v_yrgoal * 1.1
v_state = RI
v_yrgoal > 300
v_newgoal := v_yrgoal * 1.25
v_newgoal := v_yrgoal * 1.15
v_newgoal := v_yrgoal
YN
Y
Y
Y
Y
N
N
N
N
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 440 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 158.4 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
PL/SQL - IFPL/SQL - IF
SQL> @ donor2Enter value for input_idno: 12121
PL/SQL procedure successfully completed.
Input truncated to 13 charactersSQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 550 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 158.4 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
This is the segment of code that was executed to cause donor 12121to increase from 440 to 550.
IF v_state = 'RI' THEN IF v_yrgoal > 250 THEN v_newgoal := v_yrgoal * 1.25;
SET VERIFY OFFDECLARE v_pay_id first_pay_new.pay_id%TYPE :=&input_pay_id; v_salary first_pay_new.salary%TYPE; v_jobcode first_pay_new.jobcode%TYPE; v_bonus first_pay_new.bonus%TYPE; v_new_bonus first_pay_new.bonus%TYPE;BEGIN SELECT salary, jobcode, bonus INTO v_salary, v_jobcode, v_bonus FROM first_pay_new WHERE pay_id = v_pay_id; IF v_jobcode = 'CI' THEN IF v_salary > 40000 THEN v_new_bonus := v_bonus + 500; ELSE v_new_bonus := v_bonus + 250; END IF; ELSE IF v_jobcode = 'IN' THEN IF v_salary > 30000 THEN v_new_bonus := v_bonus + 250; ELSE IF v_salary > 20000 THEN v_new_bonus := v_bonus + 100; ELSE v_new_bonus := v_bonus + 50; END IF; END IF; ELSE IF v_jobcode = 'AP' THEN IF v_salary > 25000 THEN v_new_bonus := v_bonus + 100; END IF; END IF; END IF; END IF; IF v_new_bonus != v_bonus THEN UPDATE first_pay_new SET bonus = v_new_bonus WHERE pay_id = v_pay_id; END IF;END;/
SET VERIFY ON
PL/SQL - IFPL/SQL - IF
This is firstpay5. It is a series of embedded IF statements some with an ELSE and some without.
NOTE that there is an IF before the update to see if a new bonus was calculated. If it was, then the update is done.
PL/SQL - IFPL/SQL - IF
IF v_new_bonus != v_bonus THEN UPDATE first_pay_new SET bonus = v_new_bonus WHERE pay_id = v_pay_id; END IF;END;/SET VERIFY ON
SET VERIFY OFFDECLARE v_pay_id first_pay_new.pay_id%TYPE :=&input_pay_id; v_salary first_pay_new.salary%TYPE; v_jobcode first_pay_new.jobcode%TYPE; v_bonus first_pay_new.bonus%TYPE; v_new_bonus first_pay_new.bonus%TYPE;BEGIN SELECT salary, jobcode, bonus INTO v_salary, v_jobcode, v_bonus FROM first_pay_new WHERE pay_id = v_pay_id;
IF v_jobcode = 'CI' THEN IF v_salary > 40000 THEN v_new_bonus := v_bonus + 500; ELSE v_new_bonus := v_bonus + 250; END IF; ELSE IF v_jobcode = 'IN' THEN IF v_salary > 30000 THEN v_new_bonus := v_bonus + 250; ELSE IF v_salary > 20000 THEN v_new_bonus := v_bonus + 100; ELSE v_new_bonus := v_bonus + 50; END IF; END IF; ELSE IF v_jobcode = 'AP' THEN IF v_salary > 25000 THEN v_new_bonus := v_bonus + 100; END IF; END IF; END IF; END IF;
PL/SQL - IFPL/SQL - IF
v_jobcode = CI
v_salary > 40000
Increase bonus by 500
Increase bonus by 250
v_jobcode = IN
v_salary > 30000
Increase bonus by 250
Increase bonus by 50
v_salary > 20000
Increase bonus by 100
v_jobcode = AP
v_salary > 25000
Increase bonus by 100
Y
Y
Y
Y
Y
Y
Y
N
N
N
N
N
N
N
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 47250 10002222 John Davidson IN 25-SEP-92 40800 15003333 Susan Ash AP 05-FEB-00 25250 5004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 52500 20006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> @ firstpay5Enter value for input_pay_id: 5555
PL/SQL procedure successfully completed.
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 47250 10002222 John Davidson IN 25-SEP-92 40800 15003333 Susan Ash AP 05-FEB-00 25250 5004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 52500 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
PL/SQL - IFPL/SQL - IF
This is the code that was executed to make the salary foremployee 5555 increase by 500.
IF v_jobcode = 'CI' THEN IF v_salary > 40000 THEN v_new_bonus := v_bonus + 500;
SQL> @ firstpay5Enter value for input_pay_id: 7777
PL/SQL procedure successfully completed.
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 47250 10002222 John Davidson IN 25-SEP-92 40800 15003333 Susan Ash AP 05-FEB-00 25250 5004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 52500 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> @ firstpay5Enter value for input_pay_id: 3333
PL/SQL procedure successfully completed.
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 47250 10002222 John Davidson IN 25-SEP-92 40800 15003333 Susan Ash AP 05-FEB-00 25250 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 52500 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
PL/SQL - IFPL/SQL - IF
Bonus was null so no activity.
Bonus was increased by 100 because v_jobcode = AP and v_salary > 25000.
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal NUMBER(7,2); v_newgoal NUMBER(7,2); v_state VARCHAR2(2);BEGIN SELECT yrgoal, state INTO v_yrgoal, v_state FROM donornew WHERE idno = v_idno; IF v_yrgoal > 250 AND v_state = 'MA' THEN v_newgoal := v_yrgoal * 1.1 ; ELSE v_newgoal := v_yrgoal * 1.2; END IF;UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno;END;/SET VERIFY ON
SQL> edit donor3
PL/SQL - IFPL/SQL - IF
This is an example of a compound AND.
PL/SQL - Compound AND
PL/SQL - Compound AND
v_yrgoal > 250
v_state = MA
Increase goal by 10%
Increase goalby 20%
Y
Y
N
N
Increase goalby 20%
IF v_yrgoal > 250 AND v_state = 'MA' THEN v_newgoal := v_yrgoal * 1.1; ELSE v_newgoal := v_yrgoal * 1.2; END IF;
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 550 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 158.4 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
PL/SQL - Compound ANDPL/SQL - Compound AND
SQL> @ donor3Enter value for input_idno: 23456
PL/SQL procedure successfully completed.
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 550 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
IF v_yrgoal > 250 AND v_state = 'MA' THEN v_newgoal := v_yrgoal * 1.1;ELSE v_newgoal := v_yrgoal * 1.2;END IF;
Since goal was not greater than 250 the ELSE was executed and the goal was increased by 20%.
Before
After
PL/SQL - Compound ANDPL/SQL - Compound AND
SET VERIFY OFFDECLARE v_pay_id first_pay_new.pay_id%TYPE :=&input_pay_id; v_new_sal first_pay_new.salary%TYPE; v_jobcode first_pay_new.jobcode%TYPE; v_bonus first_pay_new.bonus%TYPE;BEGIN SELECT salary, jobcode, bonus INTO v_new_sal, v_jobcode, v_bonus FROM first_pay_new WHERE pay_id = v_pay_id; IF v_jobcode = 'CI' AND v_bonus > 1000 THEN v_new_sal := v_new_sal * 1.05; ELSE v_new_sal := v_new_sal * 1.02; END IF; UPDATE first_pay_new SET salary = v_new_sal WHERE pay_id = v_pay_id;END;/SET VERIFY ON
SQL> edit firstpay6
v_jobcode=CI
v_bonus > 1000
Increase salary by 5%
Increase salaryby 2%
Y
Y
N
NIncreasesalaryby 2%
PL/SQL - Compound ANDPL/SQL - Compound AND
IF v_jobcode = 'CI' AND v_bonus > 1000 THEN v_new_sal := v_new_sal * 1.05; ELSE v_new_sal := v_new_sal * 1.02; END IF;
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 47250 10002222 John Davidson IN 25-SEP-92 40800 15003333 Susan Ash AP 05-FEB-00 25250 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 52500 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
PL/SQL - Compound ANDPL/SQL - Compound AND
SQL> @ firstpay6Enter value for input_pay_id: 5555
PL/SQL procedure successfully completed.
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 48195 10002222 John Davidson IN 25-SEP-92 41616 15003333 Susan Ash AP 05-FEB-00 25250 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 55125 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> @ firstpay6Enter value for input_pay_id: 1111
PL/SQL procedure successfully completed.
SQL> @ firstpay6Enter value for input_pay_id: 2222
PL/SQL procedure successfully completed.
PL/SQL - Compound ORPL/SQL - Compound OR
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal NUMBER(7,2); v_newgoal NUMBER(7,2); v_state VARCHAR2(2);BEGIN SELECT yrgoal, state INTO v_yrgoal, v_state FROM donornew WHERE idno = v_idno; IF v_yrgoal > 250 OR v_state = 'MA' THEN v_newgoal := v_yrgoal * 1.1 ; ELSE v_newgoal := v_yrgoal * 1.2; END IF;UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno;END;/SET VERIFY ON
SQL> edit donor3a
v_yrgoal > 250
v_state = MA
Increase goal by 10%
Increase goalby 20%
Y
Y
N
N
PL/SQL - Compound ORPL/SQL - Compound OR
Increase goal by 10%
IF v_yrgoal > 250 OR v_state = 'MA' THEN v_newgoal := v_yrgoal * 1.1;ELSE v_newgoal := v_yrgoal * 1.2;END IF;
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 550 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
SQL> @ donor3a
Enter value for input_idno: 12121
PL/SQL procedure successfully completed.
SQL> @ donor3aEnter value for input_idno: 33333
PL/SQL procedure successfully completed.
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 55 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
PL/SQL - Compound ORPL/SQL - Compound OR
PL/SQL - Compound ORPL/SQL - Compound OR
SQL> edit firstpay7
SET VERIFY OFFDECLARE v_pay_id first_pay_new.pay_id%TYPE :=&input_pay_id; v_new_sal first_pay_new.salary%TYPE; v_jobcode first_pay_new.jobcode%TYPE; v_bonus first_pay_new.bonus%TYPE;BEGIN SELECT salary, jobcode, bonus INTO v_new_sal, v_jobcode, v_bonus FROM first_pay_new WHERE pay_id = v_pay_id; IF v_jobcode = 'CI' OR v_bonus > 1000 THEN v_new_sal := v_new_sal * 1.05; ELSE v_new_sal := v_new_sal * 1.02; END IF; UPDATE first_pay_new SET salary = v_new_sal WHERE pay_id = v_pay_id;END;/SET VERIFY ON
PL/SQL - Compound ORPL/SQL - Compound OR SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 48195 10002222 John Davidson IN 25-SEP-92 41616 15003333 Susan Ash AP 05-FEB-00 25250 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 55125 25006666 Joanne Brown IN 18-AUG-94 49440 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 50604.75 10002222 John Davidson IN 25-SEP-92 41616 15003333 Susan Ash AP 05-FEB-00 25755 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 55125 25006666 Joanne Brown IN 18-AUG-94 51912 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> @firstpay7Enter value for input_pay_id: 6666
PL/SQL procedure successfully completed.
SQL> @firstpay7Enter value for input_pay_id: 3333
PL/SQL procedure successfully completed.
SQL> @firstpay7Enter value for input_pay_id: 1111
PL/SQL procedure successfully completed.
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal donornew.yrgoal%TYPE; v_newgoal donornew.yrgoal%TYPE; v_state donornew.state%TYPE; v_datefst donornew.datefst%TYPE;BEGIN SELECT yrgoal, state, datefst INTO v_yrgoal, v_state, v_datefst FROM donornew WHERE idno = v_idno; IF v_state = 'MA' AND (v_yrgoal < 100 OR v_datefst > '01-JAN-98') THEN v_newgoal := v_yrgoal * 1.1 ; ELSE v_newgoal := v_yrgoal; END IF; UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno;END;/SET VERIFY ON
SQL> edit donor3b
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
v_state=MA
v_yrgoal < 100
Increase goal by 10%
No changeto goal
Y
Y
N
N
No change to goal
v_datefst >01-JAN-98
Increase goal by 10%
YN
IF v_state = 'MA' AND (v_yrgoal < 100 OR v_datefst > '01-JAN-98') THEN v_newgoal := v_yrgoal * 1.1; ELSE v_newgoal := v_yrgoal;
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 55 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
SQL> @ donor3bEnter value for input_idno: 33333
PL/SQL procedure successfully completed.
SQL> @ donor3bEnter value for input_idno: 12121
PL/SQL procedure successfully completed.
SQL> @ donor3bEnter value for input_idno: 23456
PL/SQL procedure successfully completed.
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 60.5 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
Record 33333 met the criteria and a change was made to the goal. Records 12121 and 23456 did not meet the criteria.
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal donornew.yrgoal%TYPE; v_newgoal donornew.yrgoal%TYPE; v_state donornew.state%TYPE; v_datefst donornew.datefst%TYPE;BEGIN SELECT yrgoal, state, datefst INTO v_yrgoal, v_state, v_datefst FROM donornew WHERE idno = v_idno; IF v_state = 'MA' AND v_yrgoal < 100 OR v_datefst > '01-JAN-98' THEN v_newgoal := v_yrgoal * 1.1 ; ELSE v_newgoal := v_yrgoal; END IF; UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno;END;/SET VERIFY ON
SQL> edit donor3c
v_state=MA
v_yrgoal < 100
Increase goal by 10%
No changeto goal
Y
Y
N
N
v_datefst >01-JAN-98
Increase goal by 10%
YN
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
No changeto goal
v_datefst >01-JAN-98
Increase goal by 10%
YN
IF v_state = 'MA' AND v_yrgoal < 100 OR v_datefst > '01-JAN-98' THEN v_newgoal := v_yrgoal * 1.1;ELSE v_newgoal := v_yrgoal;END IF;
v_state=MA
v_yrgoal < 100
Increase goal by 10%
No changeto goal
Y
Y
N
N
No changeto goal
v_datefst >01-JAN-98
Increase goal by 10%
YN
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
IF v_datefst > '01-JAN-98’ OR v_state = 'MA' AND v_yrgoal < 100 THEN v_newgoal := v_yrgoal * 1.1;ELSE v_newgoal := v_yrgoal;END IF;
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 60.5 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
SQL> @ donor3cEnter value for input_idno: 12121
PL/SQL procedure successfully completed.
SQL> @ donor3cEnter value for input_idno: 33333
PL/SQL procedure successfully completed.
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 66.55 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
PL/SQL - compound AND / ORPL/SQL - compound AND / OR
PL/SQL - nullPL/SQL - null
SET VERIFY OFFDECLARE v_idno VARCHAR2(5) :=&input_idno; v_yrgoal donornew.yrgoal%TYPE; v_newgoal donornew.yrgoal%TYPE; v_state donornew.state%TYPE;BEGIN SELECT yrgoal, state INTO v_yrgoal, v_state FROM donornew WHERE idno = v_idno; IF v_state = 'RI' AND (v_yrgoal < 100 OR v_yrgoal IS NULL) THEN v_newgoal := 100; ELSE v_newgoal := v_yrgoal; END IF; UPDATE donornew SET yrgoal = v_newgoal WHERE idno = v_idno;END;/SET VERIFY ON
SQL> edit donor3d
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- ------------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 66.55 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
SQL> @ donor3dEnter value for input_idno: 22222
PL/SQL procedure successfully completed.
SQL> SELECT * FROM donornew;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL CONTACT----- --------------- --------------- ---------- -- ----- --------- --------- -----------11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 845 John Smith12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 605 Susan Jones22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98 100 Susan Jones23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 190.08 Amy Costa33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 66.55 John Adams34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 63.53 Amy Costa
PL/SQL - nullPL/SQL - null
Record 22222 is for RI and the yrgoal is null so it meets the criteria and the change is made.
SQL> edit firstpay8
PL/SQL - compoundPL/SQL - compound
SET VERIFY OFFDECLARE v_pay_id first_pay_new.pay_id%TYPE :=&input_pay_id; v_new_sal first_pay_new.salary%TYPE; v_jobcode first_pay_new.jobcode%TYPE; v_bonus first_pay_new.bonus%TYPE;BEGIN SELECT salary, jobcode, bonus INTO v_new_sal, v_jobcode, v_bonus FROM first_pay_new WHERE pay_id = v_pay_id; IF v_jobcode = 'CI' AND v_bonus > 1500 OR v_jobcode = 'IN' AND v_bonus > 1000 THEN v_new_sal := v_new_sal * 1.05; END IF; UPDATE first_pay_new SET salary = v_new_sal WHERE pay_id = v_pay_id;END;/SET VERIFY ON
IF v_jobcode = 'CI' AND v_bonus > 1500 OR v_jobcode = 'IN' AND v_bonus > 1000 THEN v_new_sal := v_new_sal * 1.05;END IF;
v_jobcode=CI
v_bonus > 1500
Increase salary by 5%
Y
Y
N
Nv_jobcode=IN
YN
PL/SQL - compoundPL/SQL - compound
v_bonus > 1000
Increase salary by 5%
YN
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 50604.75 10002222 John Davidson IN 25-SEP-92 41616 15003333 Susan Ash AP 05-FEB-00 25755 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 55125 25006666 Joanne Brown IN 18-AUG-94 51912 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 46350 2000
SQL> @ firstpay8Enter value for input_pay_id: 1111
PL/SQL procedure successfully completed.
SQL> @ firstpay8Enter value for input_pay_id: 5555
PL/SQL procedure successfully completed.
SQL> SELECT * FROM first_pay_new;
PAY_ NAME JO STARTDATE SALARY BONUS---- -------------------- -- --------- --------- ---------1111 Linda Costa CI 15-JAN-97 50604.75 10002222 John Davidson IN 25-SEP-92 43696.8 15003333 Susan Ash AP 05-FEB-00 25755 6004444 Stephen York CM 03-JUL-97 42420 20005555 Richard Jones CI 30-OCT-92 57881.25 25006666 Joanne Brown IN 18-AUG-94 51912 20007777 Donald Brown CI 05-NOV-99 450008888 Paula Adams IN 12-DEC-98 48667.5 2000
SQL> @ firstpay8Enter value for input_pay_id: 2222
PL/SQL procedure successfully completed.
SQL> @ firstpay8Enter value for input_pay_id: 8888
PL/SQL procedure successfully completed.
PL/SQL - compound
PL/SQL - compound