![](/img/trans.png)
[英]Performance issue - PL/SQL fetch cursor to table of records with bulk collect
[英]CURSOR and RECORDS PL SQL
我有一個帶有書店數據庫的學術項目。 我被要求提示用戶一些暢銷書,然后使用帶有記錄的光標顯示結果。
當要求光標對那么多結果進行排序時,我似乎無法弄清楚如何整合用戶輸入。
任何想法或見解都將不勝感激!
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;
/
這是一個基於Scott模式(在Oracle 11gXE上運行)的示例; 您應該能夠重寫它,使其與您的表匹配。 我可以那樣做嗎? 當然可以,但是-您最好寫自己的作業。
基本上,它使用游標的WHERE
子句中的可接受值,從而限制了返回的行數。
我選擇不顯式聲明一個游標,因為這樣我應該:聲明一個游標變量,打開游標,循環遍歷,注意退出循環並關閉游標。 使用游標FOR循環,大多數臟工作由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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.