pl/sql编程----变量的定义与使用

在编写pl/sql块时,可以定义变量和常量;在pl/sql程序中包括有:
1、标量类型(scalar)
2、复合类型(composite)
3、参照类型(reference)
4、lob(large object)

标量(scalar)-常用类型
定义语法:
定义一个字符串:v_name varchar2(20);
定义一个小数:v_sal number(6,2);
定义一个小数并给一个初始值:v_sal number(6,2) :=4.5;
定义一个日期类型:v_date date;
定义一个布尔类型,不能为空,初始值为false :v_valid boolean not null default false;
使用变量:
输入员工号,显示雇员姓名,密码,及密码*12;

 declare
      v_num number(2):=12;
      v_name varchar2(20);
      v_mim caozyxx.mim%type;
      v_nianx number(20);
    begin
      select caozyxm,mim  into v_name,v_mim from caozyxx where caozydm = &v_id;
      v_nianx := v_mim * v_num;
      dbms_output.put_line('姓名:'||v_name||'密码:'||v_mim||'年薪:'||v_nianx);
    end;

在上面的这个案例中,我们直接定义了v_mim为number(5),但是如果我们使用的表中的对应列如果超过5了呢,这样就能用到**%type类型**直接定义相对应的列的相同类型来解决:

v_mim caozyxx.mim%type; 
--v_mim的类型大小就与caozyxx.mim列的类型大小一致;

复合变量(composite):
用于存放多个值的变量
1、pl/sql记录
创建一个记录包,将定义的一系列内容放在该包内,并在最后用一个变量保存该记录包;
也可以把他看做我们自己定义的类型

 declare
 --定义一个pl/sql记录类型,类型名为a
 type a is record(
 --在类型a中定义变量;
          v_name varchar2(20),
          v_mim caozyxx.mim%type,
          );
          --这个类型a可以存放两个数据
          --定义了一个b变量,这个变量类型是a类型;
           b a;
          v_num number(20):=12;
          v_nianx number(38);  
        begin
        --将查询的数据直接放到变量b中,因为b能存放2个类型; 
          select caozyxm,mim  into b from caozyxx where caozydm = &0;
          v_nianx := b.v_mim * v_num;
          dbms_output.put_line('姓名:'||b.v_name||'密码:'||b.v_mim||'年薪:'||v_nianx);
        end;
        --注意的是,该包内有多少变量,在执行部分中一定要传过来多少值;既caozyxm,mim....要与该记录包中定义的v_name,v_mim... 一致,定义的有多少,查询的列就要有多少,顺序也要相同;

2、pl/sql表
相当于高级语言中的数组,但该pl/sql表下标是可以为负数的,并且表元素的下标没有限制;
示例:

declare
--定义一个pl/sql表类型sp_table_type,用来存放caozyxx.caozyxm这个类型的数据
--index by binary_integer 代表下标是整数;
type sp_table_type is table of caozyxx.caozyxm%type index by binary_integer;
--定义sp_table这个变量,这个变量的类型是sp_table_type
sp_table sp_table_type;
begin
select caozyxm into sp_table(-1) from caozyxx where caozydm = '0000';
dbms_output.put_line('姓名:'||sp_table(-1));
end;

根据以上问题,如果要存错多个数据怎么办?既如果把where子句去掉的话,这个时候要用到参照变量;
参照变量
参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享形同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用**游标变量(ref cursor)对象类型变量(ref obj_type)**两种参照变量类型;

游标变量:既游标
使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open)需要指定select 语句,这样一个游标就与一个select语句结合;
实例:
使用pl/sql块,输入部门号,显示该部门所有的员工姓名,和他的工资。

declare
--定义游标类型
type sp_cursor is ref cursor;
--定义一个游标变量;
aa sp_cursor;
--定义变量
v_name caozyxx.caozyxm%type;
v_mim caozyxx.mim%type;
begin
--执行
--把aa和一个select结合;
--打开游标
open aa for select caozyxm,mim from caozyxx where qiy = 1;
--循环取出
loop
  fetch aa into v_name,v_mim;
  --判断aa是否为空
  exit when aa%notfound;
  dbms_output.put_line('姓名:'||v_name||'薪水:'||v_mim);
end loop;
end;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值