pl/sql编程(五)
- pl/sql数据类型
- 标量类型
(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) = 变长