变量的声明
variable_name [CONSTANT] type [NOT NULL] [:=value];
如:
DECLARE
v_empname VARCHAR2 (20); --定义员工名称变量
v_deptname VARCHAR2 (20); --定义部门名称变量
v_hiredate DATE NOT NULL := SYSDATE; --定义入职日期变量
v_empno INT NOT NULL DEFAULT 7369;--定义员工编码变量
BEGIN
NULL; --不执行任何代码
END;
变量的赋值
在为变量赋值时,需要注意变量的类型。如:
DECLARE
v_string VARCHAR2(200);
v_hire_date DATE;
v_bool BOOLEAN; --PL/SQL布尔类型
BEGIN
v_bool:=TRUE; --布尔类型赋值
v_hire_date:=to_date('2011-12-13','yyyy-mm-dd'); --使用函数为日期赋值
v_hire_date:=SYSDATE; --使用日期函数赋值
v_hire_date:=date'2011-12-14'; --直接赋静态日期值
v_string:='This is a string'; --赋静态字符串
END;
使用%TYPE
如:
DECLARE
v_empno emp.empno%TYPE; --使用%TYPE定义emp表empno列类型的变量
v_empno2 v_empno%TYPE; --定久与v_empno相同的变量
v_salary NUMBER(7,3) NOT NULL:=1350.5; --定义薪水变量
v_othersalary v_salary%TYPE; --定义与v_salary相同类型的变量
BEGIN
NULL;
END;
注意,%TYPE只提供类型信息,并不提供NOT NULL约束信息。
通过%TYPE的类型映射功能,是的在类型发生改变时很容易对代码进行维护,这还是一种非常好的编码风格。
使用%ROWTYPE
%TYPE仅绑定到单个数据库列的类型,而%ROWTYPE绑定到一整行的所有列类型,可以将使用%ROWTYPE定义的变量看作是一条记录类型,如:
DECLARE
v_emp emp%ROWTYPE; --定义emp表的所有列类型
BEGIN
SELECT * --查询emp表并将结果写入到v_emp记录中
INTO v_emp
FROM emp
WHERE empno = &empno;
--输出结果信息
DBMS_OUTPUT.put_line (v_emp.empno || CHR (13) || CHR (10) || v_emp.ename);
END;
DECLARE
v_emp emp%ROWTYPE; --定义emp表列类型的记录
BEGIN
v_emp.empno:=8000; --为记录类型赋值
v_emp.ename:='张三丰';
v_emp.job:='掌门';
v_emp.mgr:=7902;
v_emp.hiredate:=date'2010-12-13';
v_emp.sal:=8000;
v_emp.deptno:=20;
INSERT INTO emp VALUES v_emp; --将记录类型插入到数据表
END;
%ROWTYPE同%TYPE一样,只提供类型信息,不提供NOT NULL约束信息。
常量的定义
如:
DECLARE
c_salary_rate CONSTANT NUMBER (7, 2) := 0.25; --定义加薪常量值
v_salary NUMBER (7, 2); --定义保存薪资结果的变量
BEGIN
SELECT sal * (1 + c_salary_rate) --查询数据库,返回架薪后的结果
INTO v_salary
FROM emp
WHERE empno = &empno;
--输出屏幕消息
DBMS_OUTPUT.put_line ('加薪后的薪资:' || v_salary);
END;