在记录声明中使用 %ROWTYPE
%TYPE 属性提供了创建依赖列的数据类型的变量的简单方法。使用 %ROWTYPE 属性,您可以定义包含对应于给定表的所有列的字段的记录。每个字段都采用其对应列的数据类型。记录中的字段不继承列的任何其他属性,例如可能使用 NOT NULL 子句或 DEFAULT 子句指定的属性。
记录 是指定的、有序的字段集合。字段 类似于变量;它具有标识符和数据类型,但还具有属于记录的其他属性,并且必须采用圆点表示法将记录名称作为其限定符来进行引用。
您可以使用 %ROWTYPE 属性来声明记录。%ROWTYPE 属性以表名为前缀。指定表中的每个列定义记录中具有与列相同的数据类型的同名字段。
record table%ROWTYPE;
record 是分配给记录的标识符。table 是其列用于定义记录中的字段的表(或视图)的名称。以下示例显示上一节中的 emp_sal_query 存储过程可如何修改以使用 emp%ROWTYPE 创建名为 r_emp 的记录,而非为 emp 中的各列声明各个变量。
CREATE OR REPLACE PROCEDURE emp_sal_query (
p_empno IN emp.empno%TYPE
)
IS
r_emp emp%ROWTYPE;
v_avgsal emp.sal%TYPE;
BEGIN
SELECT ename, job, hiredate, sal, deptno
INTO r_emp.ename, r_emp.job, r_emp.hiredate, r_emp.sal, r_emp.deptno
FROM emp WHERE empno = p_empno;
DBMS_OUTPUT.PUT_LINE('Employee # : ' || p_empno);
DBMS_OUTPUT.PUT_LINE('Name : ' || r_emp.ename);
DBMS_OUTPUT.PUT_LINE('Job : ' || r_emp.job);
DBMS_OUTPUT.PUT_LINE('Hire Date : ' || r_emp.hiredate);
DBMS_OUTPUT.PUT_LINE('Salary : ' || r_emp.sal);
DBMS_OUTPUT.PUT_LINE('Dept # : ' || r_emp.deptno);
SELECT AVG(sal) INTO v_avgsal
FROM emp WHERE deptno = r_emp.deptno;
IF r_emp.sal > v_avgsal THEN
DBMS_OUTPUT.PUT_LINE('Employee''s salary is more than the '
|| 'department average of ' || v_avgsal);
ELSE
DBMS_OUTPUT.PUT_LINE('Employee''s salary does not exceed the '
|| 'department average of ' || v_avgsal);
END IF;
END;
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论