"Manual" Declaration of Variables to Match Cursor SELECT List
CREATE OR REPLACE PROCEDURE process_employee (
employee_id_in IN NUMBER)
IS
l_id NUMBER;
l_salary NUMBER (9, 2);
l_name VARCHAR2 (100);
CURSOR emp_cur
IS
SELECT employee_id,
salary,
last_name || ',' || first_name
FROM hr.employees
WHERE employee_id = employee_id_in;
BEGIN
OPEN emp_cur;
FETCH emp_cur INTO l_id, l_salary, l_name;
DBMS_OUTPUT.put_line (
l_id || '-' || l_name || '-' || l_salary);
CLOSE emp_cur;
END;
Procedure created.
BEGIN
process_employee (100);
END;
100-King,Steven-24000
Add Column to SELECT List, Program Breaks
CREATE OR REPLACE PROCEDURE process_employee (
employee_id_in IN NUMBER)
IS
l_id NUMBER;
l_salary NUMBER (9, 2);
l_name VARCHAR2 (100);
l_first_name VARCHAR2 (100);
CURSOR emp_cur
IS
SELECT employee_id,
salary,
last_name || ',' || first_name lname,
first_name
FROM hr.employees
WHERE employee_id = employee_id_in;
BEGIN
OPEN emp_cur;
FETCH emp_cur INTO l_id, l_salary, l_name;
DBMS_OUTPUT.put_line (
l_id || '-' || l_name || '-' || l_salary);
CLOSE emp_cur;
END;
Errors: PROCEDURE PROCESS_EMPLOYEE Line: 20 PLS-00394: wrong number of values in the INTO list of a FETCH statement Line: 20 PL/SQL: SQL Statement ignoredMore Details: https://docs.oracle.com/error-help/db/ora-24344
Declare Record Based on Cursor
CREATE OR REPLACE PROCEDURE process_employee (
employee_id_in IN hr.employees.employee_id%TYPE)
IS
CURSOR emp_cur
IS
SELECT employee_id,
salary,
last_name || ',' || first_name full_name
FROM hr.employees
WHERE employee_id = employee_id_in;
emp_rec emp_cur%ROWTYPE;
BEGIN
OPEN emp_cur;
FETCH emp_cur INTO emp_rec;
DBMS_OUTPUT.put_line (
emp_rec.employee_id
|| '-'
|| emp_rec.full_name
|| '-'
|| emp_rec.salary);
CLOSE emp_cur;
END;
Procedure created.
BEGIN
process_employee (100);
END;
100-King,Steven-24000
Add Column to SELECT List, Program Still Works
CREATE OR REPLACE PROCEDURE process_employee (
employee_id_in IN hr.employees.employee_id%TYPE)
IS
CURSOR emp_cur
IS
SELECT employee_id,
salary,
last_name || ',' || first_name full_name,
first_name
FROM hr.employees
WHERE employee_id = employee_id_in;
emp_rec emp_cur%ROWTYPE;
BEGIN
OPEN emp_cur;
FETCH emp_cur INTO emp_rec;
DBMS_OUTPUT.put_line (
emp_rec.employee_id
|| '-'
|| emp_rec.full_name
|| '-'
|| emp_rec.salary);
CLOSE emp_cur;
END;
Procedure created.
BEGIN
process_employee (100);
END;
100-King,Steven-24000