Table based Record Datatype: Returns a single row of all the columns from the table
SET SERVEROUTPUT ON;
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT * INTO v_emp
FROM employees
WHERE employee_id = 105;
DBMS_OUTPUT.PUT_LINE(v_emp.first_name || ' ' || v_emp.last_name);
END;
/
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT first_name, last_name INTO v_emp.first_name, v_emp.last_name
FROM employees
WHERE employee_id = 105;
DBMS_OUTPUT.PUT_LINE(v_emp.first_name || ' ' || v_emp.last_name);
END;
/
Cursor based Record Datatype
SET SERVEROUTPUT ON;
DECLARE
CURSOR cur_emp IS
SELECT first_name, last_name
FROM employees
WHERE employee_id = 120;
emp_detail cur_emp%ROWTYPE;
BEGIN
OPEN cur_emp;
FETCH cur_emp INTO emp_detail;
DBMS_OUTPUT.PUT_LINE(emp_detail.first_name || ' ' || emp_detail.last_name);
CLOSE cur_emp;
END;
/
DECLARE
CURSOR cur_emp IS
SELECT first_name, last_name
FROM employees
WHERE employee_id > 120;
emp_detail cur_emp%ROWTYPE;
BEGIN
OPEN cur_emp;
LOOP
FETCH cur_emp INTO emp_detail;
DBMS_OUTPUT.PUT_LINE(emp_detail.first_name || ' ' || emp_detail.last_name);
EXIT WHEN cur_emp%NOTFOUND;
END LOOP;
CLOSE cur_emp;
END;
/
User Defined Record Datatype
SET SERVEROUTPUT ON;
DECLARE
TYPE user_type IS RECORD (
fname employees.first_name%TYPE,
dname departments.department_name%TYPE
);
var user_type;
BEGIN
SELECT e.first_name, d.department_name INTO var.fname, var.dname
FROM employees e JOIN departments d ON e.department_id = d.department_id
WHERE e.department_id = 40;
DBMS_OUTPUT.PUT_LINE(var.fname || ' ' || var.dname);
END;
/