View Code
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(20) not 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;
-----------------------自定义变量---------------------
1、table 变量类型(相当于java中的数组)
其定义语法如下:
type 表类型名 is table of 类型 index by binary_integer;
表变量名 表类型名;
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字段);和数据表是有区别的,是类似于数组的键和值的两列结构
下标值可以为负值;
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.testtable中recordnumber为60的记录提取出来存放在table1中并显示
在定义好的表类型变量里,可以使用count、delete、first、last、next、exists和prior等属性进行操作,使用方法为“表变量名.属性”,返回的是数字。
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表变动时,此程序也得手动�%

浙公网安备 33010602011771号