w3resource

Handling SUBSCRIPT_BEYOND_COUNT exception in PL/SQL

PL/SQL Exception Handling: Exercise-13 with Solution

Handle the SUBSCRIPT_BEYOND_COUNT exception when accessing an array element beyond its declared size.

Sample Solution:

Table: employees

employee_id		integer
first_name		varchar(25)
last_name		varchar(25)
email			archar(25)
phone_number		varchar(15)
hire_date		date
job_id			varchar(25)
salary			integer
commission_pct		decimal(5,2)
manager_id		integer
department_id		integer

PL/SQL Code:

DECLARE
   TYPE employees_array IS TABLE OF hr.employees%ROWTYPE INDEX BY PLS_INTEGER;
emp_arrayemployees_array;
v_emp_idhr.employees.employee_id%TYPE;
BEGIN
   FOR emp_rec IN (SELECT * FROM hr.employees)
   LOOP
emp_array(emp_rec.employee_id) := emp_rec;
   END LOOP;
v_emp_id := 207; -- Employee ID that does not exist in the HR employees table
   BEGIN
      IF emp_array.EXISTS(v_emp_id) THEN
         DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_array(v_emp_id).first_name || ' ' || emp_array(v_emp_id).last_name);
      ELSE
         RAISE SUBSCRIPT_BEYOND_COUNT;
      END IF;
   EXCEPTION
      WHEN SUBSCRIPT_BEYOND_COUNT THEN
         DBMS_OUTPUT.PUT_LINE('Employee ID ' || v_emp_id || ' does not exist in the HR employees table.');
   END;
END;
/

Sample Output:

Employee ID 207 does not exist in the HR employees table.

Explanation:

The said code in Oracle's PL/SQL that demonstrates how to handle the SUBSCRIPT_BEYOND_COUNT exception when accessing an index beyond the defined count in a PL/SQL associative array.

An array variable employees_array of type employees ROWTYPE indexed by PLS_INTEGER is declared. It then creates an instance emp_array of employees_array.

Then the code retrieves all records from the employees table and each record is assigned to the corresponding index in emp_array using the employee's ID as the index key.

After populating the emp_array, the code sets v_emp_id to a specific employee ID 207 that does not exist in the employees table.

Then a nested BEGIN-END block handles the potential exceptions. It checks whether v_emp_id exists in emp_array or not, If it exists, it retrieves the employee's first name and last name from emp_array and displays them using the DBMS_OUTPUT.PUT_LINE procedure.

If the employee ID does not exist in emp_array, it raises the SUBSCRIPT_BEYOND_COUNT exception and a corresponding error message is displayed using DBMS_OUTPUT.PUT_LINE.

Flowchart:

Flowchart: PL/SQL Exception Handling Exercises - PL/SQL Example: Handling COLLECTION_IS_NULL exception

Previous: Handling INVALID_TRANSACTION exception in PL/SQL with Example Code.
Next: Handling ROWTYPE_MISMATCH exception in PL/SQL.

What is the difficulty level of this exercise?



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/plsql-exercises/exception-handling/plsql-exception-handling-exercise-13.php