The %TYPE and %ROWTYPE constructs provide data independence, reduce maintenance costs, and allows programs to adapt as the database changes.
Here is shown an example of the differences between two.
-- %TYPE is used to declare a field with the same type as -- that of a specified table's column. In this example emp table column name ename. DECLARE v_EmpName emp.ename%TYPE; BEGIN SELECT ename INTO v_EmpName FROM emp WHERE ROWNUM = 1; DBMS_OUTPUT.PUT_LINE('Name = ' || v_EmpName); END; / -- %ROWTYPE is used to declare a record with the same types as -- found in the specified database table, view or cursor: DECLARE v_emp emp%ROWTYPE; BEGIN v_emp.empno := 10; v_emp.ename := 'XXXXXXX'; END; /