游标和记录PL SQL

时间:2018-10-16 22:19:27

标签: sql plsql

我有一个带有书店数据库的学术项目。我被要求提示用户一些畅销书,然后使用带有记录的光标显示结果。

当要求光标对那么多结果进行排序时,我似乎无法弄清楚用户输入的集成方式。

任何想法或见解都将受到赞赏!

accept best_sllrno prompt 'Please enterthe amount of best sellers:'


DECLARE
    best_sllrno number;
    CURSOR bst_cur IS
    SELECT bk_books.title, bk_books.book_id, bk_books.year_publd, bk_books.isbn, bk_books.list_price, bk_order_details.quantity
    FROM bk_books
        JOIN bk_order_details
            ON bk_books.book_id = bk_order_details.book_id
    ORDER BY bk_order_details.order_id DESC;
bk_record bst_cur%ROWTYPE;

BEGIN

OPEN bst_cur;
FETCH bst_cur INTO bk_record;
CLOSE bst_cur;


END;
 /

1 个答案:

答案 0 :(得分:0)

这是一个基于Scott架构的示例(在Oracle 11gXE上运行);您应该能够重写它,使其与您的表匹配。我可以那样做吗?当然可以,但是-您最好写自己的作业。

基本上,它在游标的WHERE子句中使用 accepted 值,从而限制了返回的行数。

我选择不显式声明一个游标,因为这样我应该:声明一个游标变量,打开游标,在其中循环,注意退出循环并关闭游标。使用游标FOR循环,大部分 dirty 作业由Oracle完成。

SQL> accept par_how_many prompt 'How many rows do you want? '
How many rows do you want? 5
SQL> begin
  2    for cur_r in (select d.dname, e.ename
  3                  from emp e join dept d on d.deptno = e.deptno
  4                  where rownum <= &par_how_many
  5                 )
  6    loop
  7      dbms_output.put_line(cur_r.dname ||' - '|| cur_r.ename);
  8    end loop;
  9  end;
 10  /
RESEARCH - SMITH
SALES - ALLEN
SALES - WARD
RESEARCH - JONES
SALES - MARTIN

PL/SQL procedure successfully completed.

SQL>