-- 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;