2,创建如下包及包体
SQL> create or replace package pkg_teacher
2 as
3 type array_dname is table of dept.dname%type index by binary_integer;
4 procedure proc_dept(v_dname dept.dname%type);
5 end;
6 /
Package created
SQL> create or replace package body pkg_teacher
2 as
3 procedure proc_dept(v_dname in dept.dname%type)
4 is
5 begin
6 null;
7 end proc_dept;
8 end pkg_teacher;
9 /
Package body created
3,建立调用上述包中的plsql记录类型的存储过程
SQL> create or replace procedure proc_ref
(in_dname in pkg_teacher.array_dname,
out_cnt out integer)
2 as
3 begin
4 select count(*) into out_cnt from dept where dname in(in_dname(1),in_dname(2));
5 end;
6 /
Procedure created
4,以pl/sql developer工具打开第3步创建的存储过程proc_ref,然后打开test窗口
弹出如下窗口
5,查看上述的窗口,发现几点信息:
a:in_dname pl/sql记录类型的输入变量在窗口中无法输入
b:in_dname pl/sql记录类型的输入变量在begin end代码块不是以绑定变量方式,而是以proc_ref(in_dname=>in_dname),区别于绑定变量out_cnt=>:out_cnt
6,真正在窗口(此处窗口指pl/sql developer工具的测试窗口)中调用此存储过程的代码如下:
declare
-- Non-scalar parameters require additional processing
in_dname pkg_teacher.array_dname;
begin
-- Call the procedure
in_dname(1):='ACCOUNTING';//主要是这行
proc_ref(in_dname => in_dname,
out_cnt => :out_cnt);
end;
in_dname pkg_teacher.array_dname;
begin
-- Call the procedure
in_dname(1):='ACCOUNTING';//主要是这行
proc_ref(in_dname => in_dname,
out_cnt => :out_cnt);
end;