oracle中pl/sql程序高级类型的使用

本文介绍了PL/SQL编程的基本结构及其应用场景,包括最简单的更新操作、带输出显示的程序、带用户输入的程序等。此外,还展示了不同类型变量如%type、%rowtype、record及table的使用方法。
-- 1.pl/sql程序结构 ********************
-- 定义部分
declare
...
-- 执行部分
begin
...
-- 异常处理部分
exception
...
-- 结束
end;
-- 定义部分

-- 2.最简pl/sql程序 ********************
-- 执行部分
begin
update scott.dept set dname='技术部' where deptno = 60;
commit;
-- 结束
end;

-- 3.有输出显示的pl/sql程序 ********************
declare
v_dname varchar(40);
begin
 select dname into v_dname from scott.dept where deptno=60;
 dbms_output.put_line(v_dname);
end;

-- 4.有输入输出的pl/sql程序 ********************
declare
v_dname varchar(40);
begin
-- update scott.dept set dname='技术部' where deptno = 60;
 select dname into v_dname from scott.dept where deptno=&deptno;
 dbms_output.put_line(v_dname);
end;

-- 5.%type类型的使用********************
declare
v_dname scott.dept.dname%type;
begin
select dname into v_dname from scott.dept where deptno=&deptno;
dbms_output.put_line('部门名称:'||v_dname);
end;


-- 6.%rowtype的使用********************
declare
v_dept scott.dept%rowtype;
begin
select * into v_dept from scott.dept where deptno=&deptno;
dbms_output.put_line('部门编号:'||v_dept.deptno||' 部门名称:'||v_dept.dname||' 地点:'||v_dept.loc);
end;

-- 7.record的使用********************
declare
type emp_record_type is record(
     ename scott.emp.ename%type,
     dname scott.dept.dname%type
);
v_emp_record emp_record_type;
begin
     select e.ename , d.dname into v_emp_record from scott.emp e,scott.dept d where e.empno=&empno and e.deptno = d.deptno;
     dbms_output.put_line('员工名称:'||v_emp_record.ename||' 所在部门:'||v_emp_record.dname);
end;

-- 8.table 类型的使用********************
declare
type emp_record_type is record(
     ename scott.emp.ename%type,
     dname scott.dept.dname%type
);
type emp_table_type is table of emp_record_type
index by varchar2(20);
v_emp_table emp_table_type;
begin
select e.ename , d.dname into v_emp_table(0) from scott.emp e,scott.dept d where e.deptno=d.deptno and e.empno=&no1;
select e.ename , d.dname into v_emp_table(1) from scott.emp e,scott.dept d where e.deptno=d.deptno and e.empno=&no2;
     dbms_output.put_line('员工名称:'||v_emp_table(0).ename||' 所在部门:'||v_emp_table(0).dname);
     dbms_output.put_line('员工名称:'||v_emp_table(1).ename||' 所在部门:'||v_emp_table(1).dname);
end;

-- 9.table类型的多行使用********************
declare
type dname_type is table of scott.dept.dname%type;
v_dname dname_type;
begin
select dname bulk collect into v_dname from scott.dept ;
for i in v_dname.first .. v_dname.last loop
dbms_output.put_line('部门名称:'||v_dname(i));
end loop;
end;

-- 10.record、table 类型的联合使用********************
declare
type emp_record_type is record(
     ename scott.emp.ename%type,
     dname scott.dept.dname%type
);
type emp_table_type is table of emp_record_type;
v_emp_table emp_table_type;
begin
select e.ename , d.dname bulk collect into v_emp_table from scott.emp e,scott.dept d where e.deptno=d.deptno and (e.empno=&no1 or e.empno=&no2);
FOR i IN v_emp_table.first .. v_emp_table.last LOOP  
     dbms_output.put_line('员工名称:'||v_emp_table(i).ename||' 所在部门:'||v_emp_table(i).dname);
end loop;
end;

-- 11.array 类型的使用********************
declare
type emp_array is array(4) of scott.emp%rowtype;
v_emp emp_array;
begin
select * bulk collect into v_emp from scott.emp where rownum<5;
for i in v_emp.first .. v_emp.last loop
    dbms_output.put_line('员工名称:'||v_emp(i).ename||' 部门编号:'||v_emp(i).deptno);
end loop;
end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值