Oracle存储过程中cursor + with用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 公用表表达式(Common Table Expression)与游标混合应用例子:<br><br>Oracle存储过程中 cursor + with 用法 <br> -- P_PO_TYPE_CODE: 采购单据类型,如标准采购订单、一揽子采购协议 <br>-- P_ITEM_CODE : 物料号<br>-- P_CURSOR1: 输出游标类型资料 CREATE OR REPLACE PROCEDURE CUX_TEST_CUR_RV( P_PO_TYPE_CODE IN VARCHAR2, P_ITEM_CODE IN VARCHAR2, P_CURSOR1 OUT SYS_REFCURSOR) AS BEGIN OPEN P_CURSOR1 FOR WITH CTE AS ( SELECT PV.VENDOR_NAME, PV.VENDOR_CODE, PHA.PO_NUMBER,PLA.UNIT_PRICE, PHA.CREATION_DATE FROM PO_HEADERS_ALL PHA, PO_LINES_ALL PLA, PO_VENDORS PV WHERE PHA.PO_HEADER_ID = PLA.PO_HEADER_ID AND PHA.VENDOR_ID = PV.VENDOR_ID 。。。。。 ), DPT_INFO AS ( SELECT ..... ) SELECT CTE.VENDOR_NAME, CTE.VENDOR_CODE, CTE.PO_NUMBER,CTE.UNIT_PRICE FROM CTE , DPT_INFO DI WHERE CTE.PO_NUMBER = DI.PO_NUMBER ..... END ; -- 测试 游标 declare R1 sys_refcursor; V_VENDOR_NAME VARCHAR2(250); V_VENDOR_CODE VARCHAR2(150); V_PO_NUMBER VARCHAR2(150); V_UNIT_PRICE NUMBER; begin <br> CUX_TEST_CUR_RV( 'BLANKET' , 'GL0116' , R1); loop fetch R1 into V_VENDOR_NAME, V_VENDOR_CODE, V_PO_NUMBER,V_UNIT_PRICE; exit when R1%notfound; DBMS_OUTPUT.PUT_LINE( 'VENDOR_NAME,PO_NUMBER,UNIT_PRICE:' || V_VENDOR_NAME|| ',' ||V_PO_NUMBER|| ',' ||TO_CHAR( V_UNIT_PRICE, 'fm9999999999999990.00' )); end loop; close R1; end ; |
优质生活从拆开始
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了