oracle求和的成员函数

member function to get the sum in oracle

我有一个名为 sell_type 的类型定义为

CREATE OR REPLACE TYPE sell_type AS OBJECT (
    dname VARCHAR (50),
    car_model VARCHAR(20),
    make VARCHAR (20),
    price NUMBER (10,2),
    MEMBER FUNCTION total_sales RETURN NUMBER
);
/

正文:

CREATE OR REPLACE TYPE BODY sell_type AS
    MEMBER FUNCTION total_sales RETURN NUMBER IS
    BEGIN
      RETURN SELF.price;
    END total_sales;
END;
/

还有一个对象table

CREATE TABLE sell of Sell_Type;
/

我想通过以下方式获取给定卖家的总销售额:

select s.total_sales() from sell s
where s.dname = 'John Doe';

但我得到的是该卖家所有销售额的单独价格列表,而不是这些价格的总和。

我知道我必须以某种方式修复我的字体。我尝试在 return 中使用 SUM() 但这没有用。有人可以帮忙吗?

求和是一个聚合,一个set函数。一个类型是一个单一的东西; Type 实例不可能跨其对等体的所有实例执行聚合。

如果你想做这样的事情,你需要声明一个新类型,签名如下:

CREATE OR REPLACE TYPE sell_set AS OBJECT (

    sell_items sell_type,
    MEMBER FUNCTION total_sales (p_seller varchar2) RETURN NUMBER

);
/

为这种类型编写正文留作 reader 的练习;-)

请注意,Oracle SQL 和 PL/SQL 确实使用 OO 概念,但以一种笨拙的方式工作。出于教育目的探索语法是很好的,即使只是为了了解它的局限性。但现实生活中的用例非常有限。关系数据模型是存储数据的最佳方式。

这个机构可以解决问题。但它将 return 卖出时每一行的相同值 table。因此,如果您只想查看一行结果,则必须使用 'group by' 或 'max()'。

CREATE OR REPLACE
TYPE BODY SELL_TYPE AS
MEMBER FUNCTION total_sales (p_seller varchar2) RETURN NUMBER IS
total_price NUMBER;
BEGIN
SELECT sum(s.price) INTO total_price FROM sell s where s.dname = p_seller;
RETURN total_price;
END total_sales;
END;
/

select 查询将如下所示。

select s.total_sales('John') 
from sell s GROUP BY s.total_sales('John');