Uploaded by John Yong Hwang

ORACLE TSA

advertisement
www.oracle.com/academy
Database Programming with PL/SQL
4-2: Conditional Control: Case Statements
Practice Activities
Vocabulary
Identify the vocabulary word for each definition below:
CASE expression
An expression that selects a result and returns it into a variable.
Logic Tables
Shows the results of all possible combinations of two conditions.
CASE statement
A block of code that performs actions based on conditional tests.
Try It / Solve It
1. Write a PL/SQL block:
A. To find the number of airports from the countries table for a supplied country_name. Based on
this number, display a customized message as follows:
# Airports
Message
0–100
There are 100 or fewer airports.
101–1,000
There are between 101 and 1,000 airports.
1001–1,0000
There are between 1,001 and 10,000 airports.
> 10,000
There are more than 10,000 airports.
No value in database
The number of airports is not available for this country.
Use a CASE statement to process your comparisons.
You can use the following code to get started:
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
2
DECLARE
v_country_name countries.country_name%TYPE := 'United States of
America';
v_airports countries.airports%TYPE;
BEGIN
SELECT airports INTO v_airports FROM countries
WHERE country_name = v_country_name;
CASE
WHEN v_airports >= 0 AND v_airports <= 100 THEN
DBMS_OUTPUT.PUT_LINE('There are 100 or fewer airports.');
WHEN v_airports >= 101 AND v_airports <= 1000 THEN
DBMS_OUTPUT.PUT_LINE('There are between 101 and 1,000
airports.');
WHEN v_airports >= 1001 AND v_airports <= 10000 THEN
DBMS_OUTPUT.PUT_LINE('There are between 1,001 and 10,000
airports.');
WHEN v_airports > 10000 THEN
DBMS_OUTPUT.PUT_LINE('There are more than 10,000 airports.');
ELSE
DBMS_OUTPUT.PUT_LINE('The number of airports is not available for
this country.');
END CASE;
END;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
3
B. Test your code for the following countries and confirm the results.
No
value
< 101
101-1,000
1,001-10,000
Canada
> 10,000
X
Japan
X
Malaysia
X
Mongolia
X
Navassa Island
X
Romania
X
United States of America
X
2. Write a PL/SQL block:
A. To find the amount of coastline for a supplied country name. Use the
countries table. Based on the amount of coastline for the country, display
a customized message as follows:
Length of Coastline
Message
0
no coastline
< 1,000
a small coastline
< 10,000
a mid-range coastline
All other values
a large coastline
Use a CASE expression.
Use the following code to get started:
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
4
DECLARE
v_country_name
v_coastline
countries.country_name%TYPE := '<country name>';
countries.coastline %TYPE;
v_coastline_description
VARCHAR2(50);
BEGIN
SELECT coastline INTO v_coastline
FROM countries
WHERE country_name = v_country_name;
v_coastline_description :=
CASE
...
END;
DBMS_OUTPUT.PUT_LINE('Country ' || v_country_name || ' has '
|| v_coastline_description);
END;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
5
DECLARE
v_country_name countries.country_name%TYPE := 'Jamaica';
v_coastline countries.coastline%TYPE;
v_coastline_description VARCHAR2(50);
BEGIN
SELECT coastline INTO v_coastline FROM countries
WHERE country_name = v_country_name;
v_coastline_description := CASE
WHEN v_coastline = 0 THEN
'no coastline'
WHEN v_coastline >= 1 AND v_coastline < 1000 THEN
'a small coastline'
WHEN v_coastline >= 1000 AND v_coastline < 10000 THEN
'a mid-range coastline'
WHEN v_coastline >= 10000 THEN
'a large coastline'
END;
DBMS_OUTPUT.PUT_LINE('Country ' || v_country_name || ' has '|| v_coastline_description);
END;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
6
B. Test your code for the following countries and confirm the results.
No
coastline
Small
coastline
Mid-range
coastline
Canada
X
Grenada
X
Jamaica
X
Japan
Mongolia
Ukraine
Large
coastline
X
X
X
3. Use a CASE statement:
A. Write a PL/SQL block to select the number of countries using a supplied currency name. If the
number of countries is greater than 20, display “More than 20 countries”. If the number of
countries is between 10 and 20, display “Between 10 and 20 countries”. If the number of
countries is less than 10, display “Fewer than 10 countries”. Use a CASE statement.
DECLARE
v_currency_name currencies.currency_name%TYPE := 'Euro';
v_cant_pais NUMBER;
v_currency_description varchar2(50);
BEGIN
SELECT COUNT(countries.country_id) INTO v_cant_pais FROM CURRENCIES
INNER JOIN countries ON currencies.currency_code = countries.currency_code
WHERE currencies.currency_name = v_currency_name;
v_currency_description := CASE
WHEN v_cant_pais < 10 THEN
'Fewer than 10 countries'
WHEN v_cant_pais >= 10 AND v_cant_pais <= 20 THEN
'Between 10 and 20 countries'
WHEN v_cant_pais > 20 THEN
'More than 20 countries'
END;
DBMS_OUTPUT.PUT_LINE('Currency name: '||v_currency_name||' countries that use it:
'||v_cant_pais||' it is between: '|| v_currency_description);
END;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
7
B. Test your code using the following data:
Fewer than 10
countries
US Dollar
Swiss franc
Between 10 and
20 countries
More than 20
countries
X
X
Euro
X
4. Examine the following code.
A. What do you think the output will be? Test your prediction by running the code.
DECLARE
x BOOLEAN := FALSE;
y BOOLEAN;
v_color VARCHAR(20) := 'Red';
BEGIN
IF (x OR y)
THEN v_color := 'White';
ELSE
v_color := 'Black';
END IF;
DBMS_OUTPUT.PUT_LINE(v_color);
END;
Yo creo que saldra White.
Pero salio black xd.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
8
B. Change the declarations to x and y as follows. What do you think the output will be? Test your
prediction by running the code again.
x BOOLEAN ;
y BOOLEAN ;
Saldra black porque no tienen valores x o y.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
9
C. Change the declarations to x and y as follows. What do you think the output will be? Test your
prediction by running the code again.
x BOOLEAN := TRUE;
y BOOLEAN := TRUE;
Ahora creo que puede salir WHITE
Y Si salio White.
D. Experiment with changing the OR condition to AND.
Sale White silo cambiamos AND.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
Download