第三十六讲
为了让v_ename类型,更灵活,我们来用%type来自适应 如
v_ename emp.ename%type;
v_sal emp.sal%type;
此法,是与表的列相一同
2.复合变量,可以存多个变量,如同结构体
也叫:pl/sql记录。其语法是:
type 名 is record(
变量 变量的类型,
变量 变量的类型
);
快速入门
create or replace procedure pro1(v_in_empno in number)
is
--定义一个记录数据类型
type hsp_emp_record is record(
v_ename emp.ename%type;
v_sal emp.sal%type,
v_job emp.job%type
);
--定义一个变量,此变量类型是hsp_emp_record
v_emp_record hsp_emp_record;


begin
select ename,sal,job into v_emp_reord form emp where empno=empno;
dbms_output.put_line('名字'||v_emp_record.v_anme||'工资'||v.emp_record.v_sal);
end;--访问时,如同类与对象的样子
3.复合类型pl/sql表
如同java的数组,不过其下标是可变的。不是很重要
语法是
type 名 数据类型 is table of emp.sql%type index by binary_integer;
定义一个这样的变量
变量名 数据类型
4.参照变量
较重要,游标变量:通过游标可以取得返加结果的任何一行数据,可以提供共享的。


a定义游标
b打开游标
c取当前游标批向的行 fetch 游标变量 into 其他变量
d是否在末行
案例:
create or replace procedure pro1(v_in_deptno number)
is
--先定义一个游标变量类型
type hsp_emp_cursor is ref cursor;
--定义一个游标变量
v_emp_cursor hsp_emp_sursor;
v_ename emp.enme%type;
v_sal emp.sal%type;
begin
--打开一个游标
open v_emp_cursor for select ename,sal form emp;
--取此游标指向的每行数据
loop
--此语句会让游标向下走
fetch v_emp_cursor into v_ename,v_sal;
--看当前游标是否到最后
exit when v_emp_cursor%notfound;
--输出
dbms_output.out_line('用户名:'||v_ename)
end loop;
--关闭游标
close v_emp_cursor;
end;
若薪水低于二百元,则再加一百元的修改
create or replace procedure pro1(v_in_deptno number)
is
--先定义一个游标变量类型
type hsp_emp_cursor is ref cursor;
--定义一个游标变量
v_emp_cursor hsp_emp_sursor;
v_ename emp.enme%type;
v_sal emp.sal%type;
v_empno emp.empno%type;
begin
--打开一个游标
open v_emp_cursor for select ename,sal,v_empno rorm emp;
--取此游标指向的每行数据
loop
--此语句会让游标向下走
fetch v_emp_cursor into v_ename,v_sal,v_empno;
--看当前游标是否到最后
exit when v_emp_cursor%notfound;


if v_sal<200 then
update emp set sal=sal+100 where empno=v_empno;
end if;

end loop;
--关闭游标
close v_emp_cursor;
end;