32
More on IF statements Use speaker notes for additional information!

More on IF statements Use speaker notes for additional information!

Embed Size (px)

Citation preview

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