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;

  

posted @   samrv  阅读(506)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示