View Code
1、常用变量类型
binary_integer :整数,主要用来计数而不是用来表示字段类型
number :数字类型
char :定长字符串类型
varchar2 :变长字符串类型 最大4K
date: 日期
long:长字符串,最长2G
boolean:布尔类型,可以取值为 false,True,
null。null参与运算值不确定,所以最好声明变量时就给它赋值。
2、变量声明
declare
v_temp 
number(1);
v_count binary_integer :
=0;
v_sal 
number(7,2):=4000.00;
v_date date :
= sysdate;
v_pi constant 
number(3,2):=3.14;
v_valid booolean :
= false;
v_name 
varchar2(20not null :='ynp';
begin
dbms_output.put_line(
'v_temp is'||v_temp); --为连接符
end;
3、变量声明,使用%type属性
声明变量的数据对应表的某个字段的数据,当表结构改变时(如把number(
7,2),改为number(8,3)时,必须修改相应程序),用%type属性可以解决该问题。
例:
declare
v_empno 
number(4);
v_empno2 emp.empno
%type; --empno2数据类型于emp表中的empno字段相同;
v_empno3 v_empno2%type;--v_empno3数据类型于v_empno2 数据类型相同
begin
dbms_output.put_line(
'Test');
end;
-----------------------自定义变量---------------------
1table 变量类型(相当于java中的数组)

其定义语法如下:

type 表类型名 is table of 类型 index by binary_integer;

表变量名 表类型名

declare
type type_table_emp_empno 
is table of emp.empno%type index by binary_integer;
v_empnos(表变量名)  type_table_emp_empno(表类型名);
begin
v_empnos(
0) := 356;
v_empnos(
-1):=12;
v_empnos(
2):=111;
dbms_output.put_line(v_empnos(
-1));
end

说明:table变量类型命名规则:type(自定义变量)
-table(table类型变量)-emp(表emp)-empno(empno字段);和数据表是有区别的,是类似于数组的键和值的两列结构
下标值可以为负值;
面的程序定义了名为tabletype1tabletype2的两个一维表类型,相当于一维数组。table1table2分别是两种表类型变量。  

Declare

 type tabletype1 is table of varchar2(10) index by binary_integer;

 type tabletype2 is table of scott.testtable.recordnumber%type index by binary_integer;

 table1 tabletype1;

 table2 tabletype2;

begin

 table1(1):='大学';

 table1(2):='大专';

 table2(1):=88;

 table2(2):=55; 

 dbms_output.put_line(table1(1)||table2(1));

 dbms_output.put_line(table1(2)||table2(2));

end;  

定义多维表类型变量 

Declare

 type tabletype1 is table of testtable%rowtype (表名)index by binary_integer;

 table1 tabletype1;

begin

 select * into table1(60)

 from scott.testtable

 where recordnumber=60;

dbms_output.put_line(table1(60).recordnumber||' '||table1(60).currentdate);

end;

程序定义了名为tabletype1的多维表类型,相当于多维数组,table1是多维表类型变量,将数据表tempuser.testtablerecordnumber60的记录提取出来存放在table1中并显示 

在定义好的表类型变量里,可以使用countdeletefirstlastnextexistsprior等属性进行操作,使用方法为表变量名.属性,返回的是数字。


2、Record变量类型(类似于java中的类)
declare
type type_record_dept 
is record
(
deptno dept.deptno
%type, 
dname dept.dname
%type,
loc dept.loc
%type
);
v_temp type_record_dept;
begin
v_temp.deptno:
=50;
v_temp.loc:
='bj' ;
v_temp.dname:
='aaa';
dbms_output.put_line(v_temp.deptno
||' '||v_temp.dname);
end;

但上述dept表变动时,此程序也得手动�%
posted on 2011-09-09 14:23  cnby  阅读(474)  评论(0)    收藏  举报