PLSQL 2 6 Practice
PLSQL 2 6 Practice
Try It / Solve It
1. Evaluate the PL/SQL block below and determine the value of each of the
following variables according to the rules of scoping.
DECLARE
weight NUMBER(3) := 600;
message VARCHAR2(255) := 'Product
10012'; BEGIN
DECLARE
weight NUMBER(3) := 1;
message VARCHAR2(255) := 'Product
11001'; new_locn VARCHAR2(50) :=
'Europe';
BEGIN
weight := weight + 1;
new_locn := 'Western ' || new_locn;
-- Position 1 --
END;
weight := weight + 1;
message := message || ' is in stock';
-- Position 2 --
END;
Copyright © 2020, 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.
A. The value of weight at position 1 is:
weight = 2 at Position 1.
2. Enter and run the following PL/SQL block, which contains a nested block. Look at the
output and answer the questions.
DECLARE
v_employee_id employees.employee_id
%TYPE; v_job employees.job_id
%TYPE;
BEGIN
SELECT employee_id, job_id INTO v_employee_id, v_job
FROM employees
WHERE employee_id = 100;
DECLARE
v_employee_id employees.employee_id
%TYPE; v_job employees.job_id%TYPE;
BEGIN
SELECT employee_id, job_id INTO v_employee_id,
v_job FROM employees
WHERE employee_id = 103;
DBMS_OUTPUT.PUT_LINE(v_employee_id || ' is a(n) ' || v_job);
END;
A. Why does the inner block display the job_id of employee 103, not employee 100?
The inner block displays employee 103's job_id because it uses local variables in the inner block
that are separate from the outer block's variables.
B. Why does the outer block display the job_id of employee 100, not employee 103?
The outer block displays employee 100’s job_id because it is using the outer block’s variables, which
were populated by the first SELECT statement for employee 100.
2
C. Modify the code to display the details of employee 100 in the inner block. Use block labels.
To ensure that the inner block uses the outer block’s variables, we can remove the re-declaration of the variables
v_employee_id and v_job inside the inner block. This way, the inner block will use the same variables from the outer
block.
DECLARE
v_employee_id employees.employee_id%TYPE;
v_job employees.job_id%TYPE;
BEGIN
SELECT employee_id, job_id INTO v_employee_id, v_job FROM employees
WHERE employee_id = 100;
Now, both the inner and outer blocks will output the details of employee 100 because they are using the same
variables defined in the outer block
Copyright © 2020, 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.