2012-05-07 13 views
1

印刷引用

CREATE OR REPLACE 
PROCEDURE POPULATE_ACTOR_QUOTES (id_actor char) 
AS 
    CURSOR quote_recs IS 
     SELECT m.title, 
      m.year, 
      r.roleName, 
      q.quotechar 
     from quote q, 
      role r, 
      rolequote rq, 
      actor a, 
      movie m 
     where rq.quoteID = q.quoteID 
     AND rq.roleID = r.roleID 
     AND r.actorID = a.actorID 
     AND r.movieID = m.movieID 
     AND a.actorID = id_actor; 
BEGIN 
    FOR row IN quote_recs 
    LOOP 
     INSERT INTO table(
     SELECT quotes 
     FROM actor_quotes aq 
     WHERE aq.actorId = id_actor) 
     VALUES(
     ACTOR_QUOTE_TYPE(row.title, row.year, row.roleName, row.quotechar) 
    ); 
    end loop; 
END POPULATE_ACTOR_QUOTES; 
/

は(手続きPOPULATE_ACTOR_QUOTESを変更することで)PRINT_ACTOR_QUOTESと呼ばれるPL/SQLプロシージャを作成し、単一のパラメータを持つ:に対応し、姓と名の属性を出力します

CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char) 
AS 
CURSOR quote_recs IS 
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r, 
rolequote rq, actor a, movie m 
where 
rq.quoteID = q.quoteID 
AND 
rq.roleID = r.roleID 
AND 
r.actorID = a.actorID 
AND 
r.movieID = m.movieID 
AND 
a.actorID = id_actor; 
BEGIN 
FOR row IN quote_recs 
LOOP 
    DBMS_OUTPUT.PUT_LINE(row.firstName || ' ' || row.lastName); 

END LOOP; 

END PRINT_ACTOR_QUOTES; 
/
を:だけでなく、アクターID(アクターIDは、プロシージャのパラメータである)ACTORテーブルから、ネストされたQUOTESテーブルからすべての引用情報をプリントアウト

は、これは私が作成したものです0

出力

SQL> EXECUTE PRINT_ACTOR_QUOTES ('00070') 

Dustin     Hoffman 

のような出力を作成する必要があります:私は最初の名前と2番目の名前を持っている

ジェフ・ゴールドブラム

|Title   | Year |  Role  |    Quote        | 
---------------------------------------------------------------------------------------------- 
|THE FLY   |1986 |SETH BRUNDLE | “I’m free and you don’t like it’’ | 
|INDEPENDENCE DAY| 1996 | DAVID LEVINSON | “I’ve given it a virus”   | 

を - ネストされたからの情報を必要としますクォートテーブル

ヘルプが必要です!

私は、ネストされたquotes-から必要な情報が表示されます、次の選択クエリがちょうどに追加する必要があります持っている - PROCEDURE

SELECT REC.* 
    FROM ACTOR_QUOTES A,TABLE(A.QUOTES) REC 
    WHERE ACTORID = ('00070') 
+0

問題は明確ではありません。このクエリ結果をループするとどうなりますか? –

+0

私は姓と名が入った出力を作成しましたが、DBMS_OUTPUT.PUT_LINE(row.firstName || '|| row.lastName)の下にテーブルを追加する際に問題があります。タイトル、年、役割、見積もりを表示する –

答えて

0

は、私はおそらく何かが欠けているPRINT_ACTOR_QUOTES ...

CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char) 
AS 
CURSOR quote_recs IS 
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r, 
rolequote rq, actor a, movie m 
where 
rq.quoteID = q.quoteID 
AND 
rq.roleID = r.roleID 
AND 
r.actorID = a.actorID 
AND 
r.movieID = m.movieID 
AND 
a.actorID = id_actor; 

is_first boolean := true; 

BEGIN 
FOR row IN quote_recs 
LOOP 
if is_first then 
    DBMS_OUTPUT.PUT_LINE(row.firstName || ' ' || row.lastName); 
    DBMS_OUTPUT.PUT_LINE('Title | Year | Role  |  Quote '); 
    is_first := false; 
end if; 

    DBMS_OUTPUT.PUT_LINE(row.title|| ' ' || row.year|| ' ' || row.role || ' ' || row.quotechar); 

END LOOP; 

END PRINT_ACTOR_QUOTES; 
/