【问题标题】:Print Quotes from nested table从嵌套表中打印报价
【发布时间】:2012-05-15 17:57:15
【问题描述】:

尝试完成以下操作:

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

创建一个名为 PRINT_ACTOR_QUOTES 的 PL/SQL PROCEDURE(通过修改过程 POPULATE_ACTOR_QUOTES),其参数如下: 从 ACTOR 表中打印出对应于 ACTORID 的名字和姓氏属性(ACTORID 是过程参数)以及打印出来嵌套 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;
BEGIN
FOR row IN quote_recs
LOOP
  DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );

END LOOP;

END PRINT_ACTOR_QUOTES;
/ 

输出

SQL> EXECUTE PRINT_ACTOR_QUOTES ('00070')

Dustin                   Hoffman

需要创建一个如下所示的输出:

杰夫·戈德布鲁姆

|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 PRINT_ACTOR_QUOTES

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

【问题讨论】:

  • 你的问题不清楚,当你尝试循环这个查询结果时会发生什么?
  • 我已经创建了一个包含名字和姓氏的输出,但是在 DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );显示标题、年份、角色、引用

标签: oracle plsql oracle10g


【解决方案1】:

我可能错过了什么......

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2011-02-23
    相关资源
    最近更新 更多