2016-09-22 2 views
-1

eine meiner Aufgabe Frage ist: Die Methode AvgReviewScore() gibt die durchschnittliche Rezensionsbewertung für ein Album ausschließlich Bewertungen von anonymen Gutachtern, d. H. Bewertungen mit null REVIEWER_NAME.Orakel, wie SQL in Member-Funktion

Also erstens habe ich SQL: (Dies ist orientierte Datenbankzuordnung)

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; 

Kann ich fragen, wie diese SQL-Memberfunktion zu übersetzen?

ich versuche, eine Art zu schaffen, genannt: AvgReviewScore_type

und i-Typ Körperelement Funktion erstellen Sie dann wie folgt vor:

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; 

Aber es funktioniert nicht, ist es jemand über den Grund wissen?

+0

Was meinst du mit "funktioniert nicht"? Haben Sie einen Kompilierungsfehler oder einen Laufzeitfehler? und welcher Fehler? Versuchen Sie, so detailliert wie möglich zu sein, um gute Antworten zu haben – Aleksej

+0

Suchen Sie nach einer Funktion ??? Mitgliedsfunktion wird mit Objekten erstellt. Ich kann keine Definition Ihres Objekts sehen. Kannst du das auch aufnehmen? – XING

Antwort

0

Ich denke, Ihre Frage hat unvollständige Informationen und je nachdem, was gegeben ist, siehe das folgende Beispiel. Ich hoffe, es würde dir helfen.

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; 
/