Oracle PL/SQL开发入门(第三弹:变量)

变量的声明

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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值