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');
我有一个名为 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');