2012-03-31 8 views
0

ich die folgenden Tabellen erstellen haben ...PL/SQL-Prozedur mit einzelnen Parameter

CREATE TABLE Actor 
(Actor_ID CHAR(5), 
lastName CHAR(24), 
firstName CHAR(24), 
/

CREATE TABLE Movie 
(movieID CHAR(3) , 
title CHAR(36), 
year NUMBER, 
/

CREATE TABLE Role 
(roleID CHAR(5), 
roleName CHAR(36), 
actorID CHAR(5), 
movieID CHAR(3)) 
/

CREATE TABLE Quote 
(quoteID CHAR(4), 
quoteCHAR CHAR(255)) 
/

CREATE TABLE RoleQuote 
(roleID CHAR(5), 
quoteID CHAR(4)) 
/

Then i created this schemas.... 

CREATE TYPE ACTOR_QUOTE_TYPE AS OBJECT ( 
Movie_Title CHAR(36), 
Year NUMBER, 
Role CHAR(36), 
Quote CHAR(255) 
) 
/

CREATE TYPE AQ_NT AS TABLE OF ACTOR_QUOTE_TYPE 
/

CREATE TABLE ACTOR_QUOTES (
ACTORID CHAR(5), 
QUOTES AQ_NT 
) NESTED TABLE QUOTES STORE AS ACTOR_QUOTES_NT 
/

Ich brauche ein Verfahren mit einem einzelnen Parameter zu erstellen (ActorID ist Prozedurparameter) und legen Sie alle Zitate in allen Filme für jede ACTORID, in die Reihe (n) (ein Schauspieler kann viele Filme und viele Zitate haben, manche dürfen keine Anführungszeichen haben!) der geschachtelten QUOTES-Tabelle in der ACTOR_QUOTES-Tabelle für irgendeine ACTORID.

Wie mache ich das?

Dank

Bisher habe ich versucht, diese, ich bin nicht sicher, ob es richtig ist oder nicht.

CREATE OR REPLACE PROCEDURE Populate_Movies_Quote 
AS 
CURSOR Quote_cursor (ActorID in CHAR) IS 
SELECT ActorID, Quote, Movie_Title from Actor_Quotes, AQ_NT where Quotes.ActorID=ActorID; 
BEGIN 
FOR row IN Quote_cursor 
LOOP 
INSERT INTO ACTOR_QUOTES (ActorID, quotes) values (row.ActorID, AQ_NT(Actor_Quote_Type)); 
END LOOP; 
END Populate_Movies_Quote ; 
/


Show erros 


LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
4/1  PL/SQL: SQL Statement ignored 
4/55  PL/SQL: ORA-04044: procedure, function, package, or type is not 
    allowed here 

6/1  PL/SQL: Statement ignored 
6/10  PLS-00306: wrong number or types of arguments in call to 
    'QUOTE_CURSOR' 
+1

[Was haben Sie bisher versucht?] (Http://mattgemmm.com/2008/12/08/what-have-you-tried). Ich würde auch [fragen] empfehlen. – Ben

+0

Wenn dies Hausaufgaben ist, bitte markieren Sie als solche –

+0

Mehr oder weniger Duplikat von http://StackOverflow.com/Questions/9946383/pl-SQL-Procedure-using-Curs-Loops-and-Single-Parameter und http://stackoverflow.com/questions/9929058/sql-procedure-cursor-loops und http://stackoverflow.com/questions/9928363/pl-sql-cursor-loops Wenn dies eine Aufgabe ist, sollten Sie lernen, zu suchen oder (sogar besser) rede einfach miteinander. –

Antwort

0

Das kommt sicherlich bekannt vor. Ich nehme an, jemand anderes ist mit Paul Judges Aufgabe festgefahren.

Ohne dies für Sie zu tun, hier ist die grundlegende Strategie, die ich nahm.

Schreiben Sie zuerst eine Auswahlabfrage, die Filmtitel, Filmjahr, Rollenname und das Angebot für eine bestimmte Darsteller-ID in dieser Reihenfolge zurückgibt. Vergessen Sie den Vorgang für jetzt nur diese Select-Anweisung funktioniert. Es bedeutet, alle Tabellen in der Where-Klausel zu verbinden.

Wenn Sie das erreichen, dann haben Sie grundsätzlich alle Daten, die in die geschachtelte Tabelle eingefügt werden müssen.

Sie können mit der Tabellenfunktion auf die verschachtelte Tabelle zum Einfügen zugreifen. So etwas wie:

INSERT INTO TABLE(SELECT QUOTES FROM Actor_Quotes WHERE ActorID = Actor_ID) 

Wo "Actor_ID" ist der Name Ihres Prozeduren Parameter. Mit PL/SQL können Sie Werte direkt aus einer SELECT-Anweisung in eine Tabelle einfügen. Sie müssen nur sicherstellen, dass die von der SELECT-Anweisung zurückgegebenen Werte mit der Reihenfolge und dem Typ übereinstimmen, die Ihre INSERT-Anweisung erwartet. Dies ist ziemlich praktisch, da es keine Notwendigkeit für eine Cursorschleife gibt. Also im Wesentlichen alles, was Sie tun müssen, ist die select-Anweisung, die ich sagte, um zu schreiben, direkt unter der obigen Insert-Anweisung und Sie sollten sortiert werden. Stellen Sie sicher, dass Sie in Ihrer Select-Abfrage denselben Actor_ID-Parameter verwenden.

+0

Wählen Sie ActorID, Movie_Title, Jahr, Rolle, Zitat aus Actor_Quotes, AQ_NT where Actor_Quotes.ActorID = AQ_NT.ActorID; Ist es richtig ? – Shaan

+0

Nicht ganz. Denken Sie daran, dass Sie die Daten aus den Originaltabellen auswählen und sie in die neue geschachtelte Tabelle einfügen, die später in der Zuweisung erstellt wird. Sie müssen wahrscheinlich Aliase verwenden und sicherstellen, dass Sie die erforderlichen Felder beachten. – philb28

+0

Wählen Sie a.ActorID, a.lastName, a.firstName, a.middleName, m.title, m.year, r.roleName, q.quoteCHAR aus Akteur a, Film m, Rollenname rq, Zitat q, Rolle r wo und q.QuoteID = rq.QuoteID und rq.RoleID = r.RoleID und r.MovieID = m.MovieID und a.ActorID = R.ActorID; Ist es richtig, nicht – Shaan

Verwandte Themen