我有一个带有书店数据库的学术项目。我被要求提示用户一些畅销书,然后使用带有记录的光标显示结果。
当要求光标对那么多结果进行排序时,我似乎无法弄清楚用户输入的集成方式。
任何想法或见解都将受到赞赏!
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;
/
答案 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>