Функции PL/SQL в типе коллекции
Итак, я создал тип объекта с несколькими атрибутами.
И из этого объекта я также создал тип коллекции. Скажем так:
create or replace type employees as table of employee;
Теперь я хочу использовать объект коллекции для выполнения таких методов, как GetAllEmployees(), GetEmployeesByJobType() и так далее. Так что я бы где-нибудь еще вызвал тип объекта и выполнил метод:
v_list := employees.GetAllEmployees();
То же самое, что вы делаете вызов из пакета, но вместо пакета я хочу вызвать объект.
Однако я попытался указать и создать методы так же, как в объекте, но он не скомпилировался.
Теперь я знаю, что могу выполнять логику для методов в пакете, но я хочу держать это отдельно.
Итак, мой вопрос: возможно ли выполнить логику внутри коллекции объектов?
1 ответ
Это может быть примером того, что вы ищете:
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.