一、类型
a.标量类型(scalar)
b.符合类型(composite)
c.参照类型(reference)
d.lob(large object)
1.标量的定义与使用
定义一个变长字符串 v_ename varchar2(10)
定义一个小数 v_sal number(6,2)
定义一个小数并赋初值 v_sal2 number(6,2):=5.4
定义一个日期类型数据 v_hiredate date
定义一个布尔变量,不能为空,初始值为false v_valid boolean not null default false;
案例:输入员工号,显示员工的姓名,工资,个人所得税(0.03)
declare
c_tax_rate number(3,2):=0.03;
v_ename varchar2(10);
v_sal number(7,2);
v_tax_number number(7,2);
begin
--执行部分
select ename,sal into v_ename,v_sal from emp where empno=&no;
--计算所得税
v_tax_number:=v_sal*c_tax_rate;
--输出
dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'||v_tax_number);
end;
标量使用%type定义标量的类型
eg: v_ename emp.ename%type;
2.复合变量 用于存放多个值得变量
a.pl/sql记录(类似高级语言的结构体)
b.pl/sql 表
c.嵌套表
d.varray
--定义一个pl/sql记录
declare
--定义一个pl/sql记录类型 emp_record_type,类型包含三个数据name,salary,title
type emp_record_type is record(name emp.ename%type,salary emp.sal%type ,title emp.job%type);
--定义一个sp_record变量,这个变量类型是emp_record_type
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno='7788';
dbms_output.put_line('姓名:'||sp_record.name||'薪水'||sp_record.salary||'工作'||sp_record.title);
end;
--定义一个pl/sql表实例
declare
--定义一个pl/sql表实例sp_table_type,该类型用于存放emp.ename%type,index by binary_integer表示下标是整数
type sp_table_type is table of emp.ename%type index by binary_integer;
sp_table sp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('员工名'||sp_table(0));
end;
3.参照变量
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。
在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref_obj_type)两总参照变量类型。
游标类型(ref cursor)
使用游标时,当定义游标是不需要指定相应的select语句,但是当使用游标时(open)需要指定select语句,这样一个游标就与一个select语句想结合了。
案例:使用批量pl/sql编写一个快,可以输入部门号,并显示该部门的所有员工姓名和工资。
declare
type sp_emp_cursor is ref cursor;
test_coursor sp_emp_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open test_cursor for select ename,sal from emp where deptno=&no;
loop
fetch test_corsor into v_ename,v_sal;
exit when test_cursor%notfound;
dbms_output.put_line('名字'||v_ename||'工资'||v_sal);
end loop;
close test_cursor;
end;