Oracle参数变量类型
1.在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有:
a.标量类型(scalar)
b.复合类型(composite)
c.参照类型(reference)
d.lob(large object)
1) 标量(scalar)——常用类型
在编写pl/sql块时,如果要使用变量,需在定义部分定义变量。pl/sql中定义变量和常量的语法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constant:指定常量。需要指定它的初始值,且其值是不能改变的
datatype:数据类型
not null:指定变量值不能为null
:=给变量或是常量指定初始值
default用于指定初始值
expr:指定初始值的pl/sql表达式,可以是文本值、其它变量、函数等。
标量定义的案例
1.定义一个变长字符串
v_ename varchar2(10);
2.定义一个小数,范围 -9999.99~9999.99
v_sal number(6,2);
3.定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号
v_sal2 number(6,2):=5.4;
4.定义一个日期类型的数据
v_hiredate date;
5.定义一个布尔变量,不能为空,初始值为false
v_valid boolean not null default false;
6.使用%type类型表名.字段名%type
v_ename emp.ename%type;
2) 复合变量(composite)——介绍
用于存放多个值的变量。主要包括这几种:
1.pl/sql记录
2.pl/sql表
3.嵌套表
4.varray
a. 复合类型——pl/sql记录
type emp_record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type
);
v_emp_record emp_record_type;
b. 复合类型-pl/sql表
相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制。实例如下:
declare
type record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type
);
type record_table_type is table of record_type
index by binary_integer;
v_record_table record_table_type;
begin
select ename, sal, job into v_record_table(-1) from emp where empno = 7788;
dbms_output.put_line('姓名:' || v_record_table(-1).name
|| ' 工资:' || v_record_table(-1).salary);
end;
3) 参照变量——ref cursor游标变量
使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要指定select语句,这样一个游标就与一个select语句结合了。
-- 定义游标类型 ref cursor 取指定部门的所有员工的姓名和工资
declare
type cursor_type is ref cursor;
v_cursor_test cursor_type;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open v_cursor_test for select ename, sal from emp where deptno = &no;
--循环取出数据并显示
loop
fetch v_cursor_test into v_ename, v_sal;
exit when v_cursor_test%notfound;
dbms_output.put_line('姓名:' || v_ename || ' 工资:' || v_sal);
end loop;
end;