2016-09-22 51 views
-1

我的一个任务问题是: 方法AvgReviewScore()返回一个专辑的平均评论分数,不包括来自匿名评论者的评分,即带有空的REVIEWER_NAME的评论。oracle如何将SQL转换为成员函数

所以,首先我写SQL: (这是面向对象数据库分配)

select deref(b.album).title 
,round(avg(b2.reviewscore),2) 
from album_artist_table b,table(deref(b.album).review) b2 
where deref(b.artist).aname like '%Joe%' 
and b2.reviewername is not null 
group by deref(b.album).title; 

我可以问怎么这个SQL成员函数的翻译?

我尝试创建一个名为类型:AvgReviewScore_type

,然后我创造型体成员函数如下:

create or replace TYPE BODY ALBUM_TYPE AS                            
member function AvgReviewScore return AvgReviewScore_type AS 
AVGtable AvgReviewScore_type := AvgReviewScore_type(null,null); 
BEGIN 

select deref(b.album).title,round(avg(b2.reviewscore),2) 
into AVGtable 
from album_artist_table b,table(deref(b.album).review) b2 
where b2.reviewername is not null 
group by deref(b.album).title; 
return AVGtable; 
END AvgReviewScore; 
END; 

但它不工作,有没有人知道这是什么缘故?

+0

你是什么意思与“不工作”?你是否有编译错误或运行时错误?和什么错误?尽量做到尽可能详细,以获得良好的答案 – Aleksej

+0

您是否在寻找一个功能?成员函数是用Objects创建的。我看不到你的对象的任何定义。你也可以包括这个。 – XING

回答

0

我想你的问题有不完整的信息,并取决于给出的任何看到下面的例子。我希望它能帮助你。

Create type exmpl_type as object ( 
    num number,  
    member function func(p in number) return number 
); 
/

create type body exmpl_type as    
    member function func(p in number) 
    return number is 
    begin 
    return num/p; 
    end func; 
end; 
/