Plsql 集合类型中的PL/SQL函数

Plsql 集合类型中的PL/SQL函数,plsql,plsql-package,Plsql,Plsql Package,因此,我创建了一个具有多个属性的对象类型 从这个对象我还创建了一个集合类型。 比如说: create or replace type employees as table of employee; 现在我想使用collection对象来执行诸如GetAllEmployees()、GetEmployeesByJobType()等方法。因此,我将在其他地方调用对象类型并执行该方法: v_list:=employees.GetAllEmployees() 与从包中调用相同,但我想调用对象而不是包

因此,我创建了一个具有多个属性的对象类型

从这个对象我还创建了一个集合类型。 比如说:

create or replace type employees as table of employee; 
现在我想使用collection对象来执行诸如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 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.

不清楚你在找什么。请发布一些示例数据和示例以了解更多信息。不清楚您在寻找什么。请发布一些示例数据和示例以了解更多信息。当然!只需围绕列表构建一个对象,并在其中添加方法。太简单了!大脑仍处于周末模式,谢谢。当然!只需围绕列表构建一个对象,并在其中添加方法。太简单了!大脑仍处于周末模式,谢谢。