簡體   English   中英

游標和記錄PL SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM