pl/sql编程(五)

  • pl/sql数据类型
  1. 标量类型

   (1)数值类型

     number

     pls_integer、binary_integer

     simple_integer

    (2)字符类型

      char

      varchar2

      long

     nchar、nvarchar2

    (3)布尔类型

    取值:true、false、null

   (4)日期类型

    date

    timestamp

   (5)%type

    这是一个特殊的表示形式,在声明变量时可以使用它表示变量,对应数据表中某列的数据类型。

2.符合类型

  (1)记录类型  

      a.自定义的记录类型

declare
type goods_record is record
(
     v_goodsid number(4),
     v_goodsname varchar2(4000)
);
v_goods_record goods_record;
begin
     select goodsid ,goodsname into v_goods_record from goods where goodsid = 1;
     dbms_output.put_line('v_goodsid = ' || v_goods_record.v_goodsid);
     dbms_output.put_line('v_goodsname = ' || v_goods_record.v_goodsname);
end;

  结果:

v_goodsid = 1
v_goodsname = 白加黑

    b.利用%rowtype方式指明数据类型

declare 
v_goods_record goods%rowtype;
begin
     select * into v_goods_record from goods where goodsid = 2;
     dbms_output.put_line('v_goodsid = ' || v_goods_record.goodsid);
     dbms_output.put_line('v_goodsname = ' || v_goods_record.goodsname);
     dbms_output.put_line('v_remark = ' || v_goods_record.remark);
     
end;

  结果:

v_goodsid = 2
v_goodsname = 快克
v_remark = 5(出货)

  (2)索引表类型

declare 
type binary_inx_fst is table of goods%rowtype
     index by binary_integer;
type pls_inx_sec is table of varchar2(20)
     index by pls_integer;
type vchr_inx_thd is table of number(8)
     index by varchar2(20);
 v_inx_binary binary_inx_fst;
 v_inx_sec pls_inx_sec;
 v_inx_vchr vchr_inx_thd;
begin
     select * into v_inx_binary(1) from goods where goodsid = 2;
     dbms_output.put_line('v_inx_binary 的值='||v_inx_binary(1).goodsid||'--'||v_inx_binary(1).goodsname||'--'||v_inx_binary(1).remark);
     
     v_inx_sec(1) :='我的值是10!';
     v_inx_sec(-1) :='我的值是-10!';
     dbms_output.put_line('v_inx_sec(1)的值是='||v_inx_sec(1));
     dbms_output.put_line('v_inx_sec(-1)的值是='||v_inx_sec(-1));
     
     v_inx_vchr('f'):=123;
     v_inx_vchr('s'):=124;
     dbms_output.put_line('v_inx_vchr(f)的值='||v_inx_vchr('f'));
     dbms_output.put_line('v_inx_vchr.first)的值='||v_inx_vchr.first);
     dbms_output.put_line('v_inx_vchr(v_inx_vchr.first)的值='||v_inx_vchr(v_inx_vchr.first));
     dbms_output.put_line('v_inx_vchr(s)的值='||v_inx_vchr('s'));
end;

  结果:

v_inx_binary 的值=2--快克--5(出货)
v_inx_sec(1)的值是=我的值是10!
v_inx_sec(-1)的值是=我的值是-10!
v_inx_vchr(f)的值=123
v_inx_vchr.first)的值=f
v_inx_vchr(v_inx_vchr.first)的值=123
v_inx_vchr(s)的值=124

(3)变长数组类型
  

v_inx_binary 的值=2--快克--5(出货)
v_inx_sec(1)的值是=我的值是10!
v_inx_sec(-1)的值是=我的值是-10!
v_inx_vchr(f)的值=123
v_inx_vchr.first)的值=f
v_inx_vchr(v_inx_vchr.first)的值=123
v_inx_vchr(s)的值=124

  结果:

v_varr(1) = 我是
v_varr(2) = 变长

 

posted @ 2012-04-11 22:56  shuaisam  阅读(229)  评论(0编辑  收藏  举报