%TYPE类型
当声明一个变量名称后便声明其具体的数据类型,
而使用%TYPE类型可以在声明变量名称后再指定一个字段,声明该变量的数据类型与指定字段的数据类型一致。
--
DECLARE
--声明变量INAME,其类型与EMP表中的ENAME字段一致
IEMPNO EMP.EMPNO%TYPE;
--定义一个变量承载异常
ERR VARCHAR2(200);
BEGIN
SELECT EMPNO INTO IEMPNO FROM EMP WHERE ENAME='SMITH';
/* SELECT ENAME INTO INAME FROM EMP;*/ --测试异常
DBMS_OUTPUT.PUT_LINE(IEMPNO);
EXCEPTION
WHEN OTHERS THEN
ERR:=SQLERRM;
DBMS_OUTPUT.PUT_LINE(ERR);
END;
RECORD类型
RECORD类型又称记录类型,该类型的变量可以存储由多个列组成的一行数据。
因为变量中的每一列需要有明确的数据类型,且每个变量中的列成员是不固定的,所以在声明记录类型的变量之前,
需要先定义一个记录类型,再声明变量 。
--语法
DECLARE
TYPE RECOED_TYPE IS RECORD
(
VAR_NUMBER1 TYPE ,
V_NUMBER2 TYPE,
V_NUMBER3 TYPE,
.
.
V_NUMBERN TYPE
);
VAR_NAME RECORD_TYPE; --将该记录给变量,作为变量的类型
BEGIN
SELECT ENAME,SAL,HIREDATE INTO VAR_NAME FROM EMP WHERE DEPTNO=7369;
DBMS_OUTPUT.PUT_LINE(VAR_NAME);
END;
--SELECT * FROM DEPT;
DECLARE
--声明一个记录类型
TYPE DEPT_TYPE IS RECORD
(
DE DEPT.DEPTNO%TYPE,
DN DEPT.DNAME%TYPE,
LO DEPT.LOC%TYPE
);
--用该记录类型来声明一个变量
VAR_DEPT DEPT_TYPE;
BEGIN
--查询DEPT表,并将查询数据放入变量VAR_DEPT中
SELECT DEPTNO,DNAME,LOC INTO VAR_DEPT FROM DEPT WHERE DEPTNO=10;
--将变量VAR_DEPT打印(打印时需要表明要打印的字段,字段间用||连接)
DBMS_OUTPUT.PUT_LINE(VAR_DEPT.DE||' '||VAR_DEPT.DN||' '||VAR_DEPT.LO);
END;
%ROWTYPE类型
%ROWTYPE类型是结合了%TYPE类型与RECORD类型的特点,%TYPE类型是效仿一个字段设置数据类型,
RECORD类型是设置一行变量的数据类型,而%ROWTYPE是效仿一行字段设置变量的数据类型。
%ROWTYPE类型与RECORD类型一样本身没有确切的列数和属性,但是%ROWTYPE类型不需要单独定义,直接使用即可。
--例子(DEPT表)
DECLARE
--%ROWTYPE类型不需要声明定义,可以直接使用
VAR_DEPT DEPT%ROWTYPE;
BEGIN
--查询数据,并将查询的数据放入变量VAR_DEPT
SELECT DEPTNO,DNAME,LOC INTO VAR_DEPT FROM DEPT WHERE DEPTNO=10;
--打印数据
DBMS_OUTPUT.PUT_LINE(VAR_DEPT.DEPTNO||' '||VAR_DEPT.DNAME||' '||VAR_DEPT.LOC);
END;