+ All Categories
Home > Documents > More on IF statements Use speaker notes for additional information!

More on IF statements Use speaker notes for additional information!

Date post: 18-Dec-2015
Category:
Upload: jason-hodge
View: 223 times
Download: 2 times
Share this document with a friend
32
More on IF statements Use speaker notes for additional information!
Transcript

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


Recommended