PL/SQL 集合类型的函数
PL/SQL Functions in collection type
所以我创建了一个具有多个属性的对象类型。
我还从该对象创建了一个集合类型。
比方说:
create or replace type employees as table of employee;
现在我想使用集合对象来执行GetAllEmployees()、GetEmployeesByJobType()等方法。这样我就可以在其他地方调用对象类型并执行方法:
v_list := employees.GetAllEmployees();
与您从包中进行调用相同,但我想调用一个对象而不是包。
但是我尝试像在对象中那样指定和创建方法,但它无法编译。
现在我知道我可以执行包中方法的逻辑,但我想将其分开。
所以我的问题是:是否可以在对象集合中执行逻辑?
这可能是您正在寻找的示例:
create or replace type employeeObj as object (id number, name varchar2(100));
create or replace type employeeList is table of employeeObj;
create or replace type employeeListObj as object
(
listOfEmployees employeeList,
member procedure GetAllEmployees
);
create or replace type body employeeListObj is
member procedure GetAllEmployees is
begin
for i in listOfEmployees.first .. listOfEmployees.last loop
dbms_output.put_line('Emp: ' || listOfEmployees(i).name );
end loop;
end;
end;
工作原理:
SQL> declare
2 vListEmp employeeList;
3 vListEmpObj employeeListObj;
4 begin
5 vListEmp := employeeList();
6 vListEmp.extend(2);
7 vListEmp(1) := employeeObj(1, 'John Smith');
8 vListEmp(2) := employeeObj(2, 'Steve James');
9
10 vListEmpObj := new employeeListObj(vListEmp);
11
12 vListEmpObj.GetAllEmployees();
13 end;
14 /
Emp: John Smith
Emp: Steve James
PL/SQL procedure successfully completed.
所以我创建了一个具有多个属性的对象类型。
我还从该对象创建了一个集合类型。 比方说:
create or replace type employees as table of employee;
现在我想使用集合对象来执行GetAllEmployees()、GetEmployeesByJobType()等方法。这样我就可以在其他地方调用对象类型并执行方法:
v_list := employees.GetAllEmployees();
与您从包中进行调用相同,但我想调用一个对象而不是包。
但是我尝试像在对象中那样指定和创建方法,但它无法编译。
现在我知道我可以执行包中方法的逻辑,但我想将其分开。
所以我的问题是:是否可以在对象集合中执行逻辑?
这可能是您正在寻找的示例:
create or replace type employeeObj as object (id number, name varchar2(100));
create or replace type employeeList is table of employeeObj;
create or replace type employeeListObj as object
(
listOfEmployees employeeList,
member procedure GetAllEmployees
);
create or replace type body employeeListObj is
member procedure GetAllEmployees is
begin
for i in listOfEmployees.first .. listOfEmployees.last loop
dbms_output.put_line('Emp: ' || listOfEmployees(i).name );
end loop;
end;
end;
工作原理:
SQL> declare
2 vListEmp employeeList;
3 vListEmpObj employeeListObj;
4 begin
5 vListEmp := employeeList();
6 vListEmp.extend(2);
7 vListEmp(1) := employeeObj(1, 'John Smith');
8 vListEmp(2) := employeeObj(2, 'Steve James');
9
10 vListEmpObj := new employeeListObj(vListEmp);
11
12 vListEmpObj.GetAllEmployees();
13 end;
14 /
Emp: John Smith
Emp: Steve James
PL/SQL procedure successfully completed.