2016-03-22 9 views
0

customer_ty Objekt erstellt I erstellt haben, hat eine verschachtelte TabelleTyp Körper mit Kompilierungsfehler

CREATE TYPE deposit_ty as object(
depNo number, 
depCategory ref depcategory_ty, 
amount number, 
period number 
) 
/

CREATE TYPE deposit_tbl as table of deposit_ty 
/

CREATE TYPE customer_ty as object(
custId varchar2(4), 
custName varchar2(10), 
address address_ty, 
dob date, 
deposits deposit_tbl 
) 
/

I geschrieben haben einen Code, einschließlich der Gesamtmenge von jedem Client abgelegt zu berechnen. Hier ist der Code, den ich geschrieben habe;

Aber ich bekomme eine Warnung, dass der "Typ Körper mit Kompilierungsfehler erstellt". Was kann ich tun, um das los zu werden?

Antwort

1

Wenn Sie das tun show errors sofort, nachdem Sie die Meldung ‚mit Kompilierungsfehlern erstellt‘ zu bekommen, werden Sie so etwas wie sehen:

LINE/COL ERROR 
-------- ------------------------------------------------------------------------------ 
8/5  PLS-00103: Encountered the symbol "GROUP" when expecting one of the following: 

Sie auch die user_errors oder all_errors Ansicht abfragen können die noch offenen Fehler zu sehen, gegen alle PL/SQL-Objekte.

In diesem Fall ist es ein einfacher Tippfehler; Du hast das Semikolon an der falschen Stelle; Statt:

select sum(d.amount) into total 
from table(self.deposits) d; 
group by self.custId,self.custName 

es sein sollte:

select sum(d.amount) into total 
from table(self.deposits) d 
group by self.custId,self.custName; 

In Ihrer Version die ... d;, dass SQL-Anweisung beendet wird - die jetzt ungültig wäre, weil die abgeschnittene Aussage keine Gruppe durch Klausel hat; aber es kommt nicht so weit, sich darüber zu beschweren, weil es die als separate Anweisung sieht, und das ist nicht der Anfang von irgendetwas, was PL/SQL als Abfrage, Anweisung, Steuerschleife usw. erkennt, also gibt es auf .

+0

Ich hatte keine Ahnung, wie Semikolon in Funktionen zu setzen. Vielen Dank für die Erklärung. Jetzt funktioniert es und ich verstehe die Funktionen besser. – Pegasus

+0

Ein Semikolon beendet eine Anweisung, die eine SQL-Anweisung, eine PL/SQL-Variablenzuordnung, ein Steuerkonstrukt usw. sein kann. Die Gruppierung nach ist Teil der Select-Anweisung - in der Mitte von a sollte kein Semikolon stehen einzelne SQL-Anweisung. –