SQL 使用 OBJECT 作为 ORDER 方法的参数

标签 sql oracle methods plsql

我有一个名为 Employee 的类型,它有一个以 Employee 作为参数的 ORDER 方法。我创建了一个 Employee 表并插入了一些数据。我正在尝试使用 SELECT 测试此 ORDER 方法,但是我很难满足参数。这是我的代码

    CREATE OR REPLACE TYPE Employee AS OBJECT(
  EmpID           VARCHAR(15),
   eName           VARCHAR(30),
   ePhone          NUMBER,
   eAddress        VARCHAR(15),
   ePosition       VARCHAR(15),
   eHireDt         DATE,
   salary          NUMBER,
   ORDER MEMBER FUNCTION orderSalary (e Employee) RETURN NUMBER)
NOT FINAL;
/

CREATE OR REPLACE TYPE BODY Employee AS
   ORDER MEMBER FUNCTION orderSalary(e Employee) return number IS
   BEGIN
      IF(self.salary > e.salary) then
         return(1);
      ELSIF (self.salary < e.salary) then
         return(-1);
        ELSE
            return(0);
      END IF;
   END;
END;
/

CREATE TABLE Emp OF Employee (EmpID PRIMARY KEY)
OBJECT IDENTIFIER PRIMARY KEY;


insert into Emp values('001','kabir',6477732272,'Pharmacy','clerk','2016-03-28',2000);

这是给我带来麻烦的一行:

SELECT p.orderSalary(Employee s) FROM Emp p;

我需要做的就是测试这个方法以确保它有效,有什么方法可以创建一个 Employee 实例来用作参数,或者从 Emp 表中获取一行?谢谢!

最佳答案

SELECT p.orderSalary( VALUE( p ) ) FROM Emp p;

或者:

SELECT p.orderSalary( DEREF( REF( p ) ) ) FROM Emp p;

或者:

SET SERVEROUTPUT ON;
DECLARE
  e1 EMPLOYEE := NEW EMPLOYEE('001','kabir',6477732272,'Pharmacy','clerk',DATE '2016-03-28',2000);
  e2 EMPLOYEE := NEW EMPLOYEE('002','bob',1234567890,'Library','assistant',DATE '2016-03-07',1000);
BEGIN
  DBMS_OUTPUT.PUT_LINE( e1.orderSalary( e2 ) );
END;
/

更新 - 选择不同的行:

insert into Emp values('001','kabir',6477732272,'Pharmacy','clerk','2016-03-28',2000);
insert into Emp values('002','bob',1234567890,'Library','assistant',DATE '2016-03-07',1000);

SELECT e1.ename AS name1,
       e2.ename AS name2,
       e1.orderSalary( VALUE( e2 ) )
FROM   Emp e1
       CROSS JOIN Emp e2;

输出:

NAME1  NAME2  E1.ORDERSALARY(VALUE(E2))
------ ------ -------------------------
kabir  kabir                          0 
kabir  bob                            1 
bob    kabir                         -1 
bob    bob                            0 

关于SQL 使用 OBJECT 作为 ORDER 方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35855955/

相关文章:

sql - 查找并生成某个范围日期的值

mysql - 如何将第二个表的行合并到 1 个字段

mysql - 使用子查询更新表在 mysql 上有效,但在 oracle 上出错

database - Oracle中通过脚本创建新表时将列名更改为大写如何解决?

python-3.x - 如何在Python中获取方法名称

java - 结果集元数据不返回第一行

sql - Oracle OCI C 代码中的错误 OCI_INVALID_HANDLE

oracle - 在 Quercus/Tomcat 上使用 Zend 并连接到 Oracle

java - 从一个方法调用特定变量到主类

Python:在方法之间传递变量时,是否需要为其指定一个新名称?