存儲過程示例:使用游標處理數據


 1 CREATE OR REPLACE PROCEDURE PRODUCT_CUR_PRC AS
 2   CUR_CTGY     PRODUCTINFO.CATEGORY%TYPE; --存放產品類型編碼
 3   CUR_CTGYNAME CATEGORYINFO.CATEGORYNAME%TYPE; --存放產品類型名稱
 4   CUR_PRTIFO   PRODUCTINFO%ROWTYPE; --存放表productinfo的行記錄
 5   
 6   CURSOR CUR_CATEGORY IS
 7     SELECT CATEGORY FROM PRODUCTINFO GROUP BY CATEGORY;
 8 
 9 BEGIN
10   OPEN CUR_CATEGORY;
11    LOOP
12     FETCH CUR_CATEGORY
13       INTO CUR_CTGY;
14     EXIT WHEN CUR_CATEGORY%NOTFOUND;
15     SELECT CATEGORYINFO.CATEGORYNAME
16       INTO CUR_CTGYNAME
17       FROM CATEGORYINFO
18      WHERE CATEGORYID = CUR_CTGY; --根據產品類型編碼得到產品類型名稱
19   
20     IF SQL%FOUND THEN
21       DBMS_OUTPUT.PUT_LINE('------------');
22       DBMS_OUTPUT.PUT_LINE(CUR_CTGYNAME || ':');
23     END IF;
24     
25     FOR MY_PRDINFO_REC IN (SELECT * FROM PRODUCTINFO WHERE CATEGORY = cur_ctgy) LOOP DBMS_OUTPUT.PUT_LINE('產品名稱:' || MY_PRDINFO_REC.PRODUCTNAME || '產品價格:' || MY_PRDINFO_REC.PRODUCTPRICE || '產品數量:' || MY_PRDINFO_REC.QUANTITY);
26   END LOOP;
27 END LOOP; CLOSE CUR_CATEGORY;
28 END;

【代碼解析】

第1行表示創建存儲過程,名稱是product_cur_prc;

第2~4行表示變量的名稱及變量類型。

第6~7行表示創建一個游標,表示從productinfo表中查詢已有的產品類型。

第10~14行表示打開cur_category游標並進入循環流提取數據,當數據提取完畢后退出。

第15~18行表示在categoryinfo表中,根據產品的編碼得到產品類型名稱,並把得到的結果賦值給變量cur_ctgyname。

第20~23行表示利用隱式游標%found屬性判斷第15~18行的查詢是否有結果,如果有,則把產品類型名稱輸出到屏幕。

第25~28行表示利用隱式游標獲取某類型的所有產品,並把產品信息輸出到屏幕。

【執行如下】

SQL>exec product_cur_prc;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM