Функции PL / SQL в типе коллекции - PullRequest
0 голосов
/ 25 июня 2018

Итак, я создал тип объекта с несколькими атрибутами.

И из этого объекта я также создал тип коллекции. Допустим,

create or replace type employees as table of employee; 

Теперь я хочу использовать объект коллекции для выполнения таких методов, как GetAllEmployees (), GetEmployeesByJobType () и так далее. Чтобы я где-нибудь еще вызвал тип объекта и выполнил метод:

v_list := employees.GetAllEmployees(); То же самое, что вы делаете вызов из пакета, но вместо пакета я хочу вызвать объект.

Однако я попытался указать и создать методы так же, как в объекте, но он не скомпилировался.

Теперь я знаю, что могу выполнять логику для методов в пакете, но я хочу, чтобы она была отдельной.

Итак, мой вопрос: возможно ли выполнить логику внутри коллекции объектов?

1 Ответ

0 голосов
/ 25 июня 2018

Это может быть примером того, что вы ищете:

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