博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle存储过程及sql优化-(二)
阅读量:6413 次
发布时间:2019-06-23

本文共 4299 字,大约阅读时间需要 14 分钟。

接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解

PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR,   PI_XH PLS_INTEGER, PV_ZGSWJG  VARCHAR2 --管理单位 --PI_HSND    PLS_INTEGER, --汇算年度 --QR_HYDM    PLS_INTEGER --行业 ) AS   VI_HYXH PLS_INTEGER ; BEGIN  VI_HYXH:=NVL(PI_XH ,0);   DELETE FROM TMP_GT3_SBFGL_WJSTJB;      if VI_HYXH >= 6 AND VI_HYXH <= 36 then   insert into TMP_GT3_sbfgl_WJSTJB    SELECT  NSR.NSRSBH,                    NSR.NSRMC,                    NSR.SCJYDZ,                    case                      when NSRKZ.FDDBRYDDH is not null then                       '法人' || NSRKZ.FDDBRYDDH                      else                       ''                    end || case                      when NSRKZ.SWDLRLXDH is not null then                       ',税务代理人' || NSRKZ.SWDLRLXDH                      else                       ''                    end || case                      when NSRKZ.BSRYDDH is not null then                       ',办税人' || NSRKZ.BSRYDDH                      else                       ''                    end AS FDDBRGDDH,                    F.SWJGMC,                    G.SWJGMC      FROM AP_CXBB_GT3_SBFAQYYIJSTJ_cs B ,           H_DJ_NSRXX           NSR,           H_DJ_NSRXX_KZ        NSRKZ,           DM_GY_SWJG_JH F,           DM_GY_SWJG_JH G                WHERE NSR.ZGSWJ_DM = F.SWJG_DM(+)       AND B.SWJGDM = G.SWJG_DM(+)       AND B.DJXH = NSR.DJXH(+)       AND B.DJXH = NSRKZ.DJXH(+)      AND ( B.SWJGDM IN               (SELECT SWJG_DM                  FROM DM_GY_SWJG_JH V                 START WITH V.SWJG_DM IN (PV_ZGSWJG)                CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM))               AND (VI_HYXH = 0 OR               NSR.HY_DM IN               (SELECT HY_DM                   FROM DM_HY_JH                  WHERE ZL IN                        (SELECT HYDM FROM TEMP_HYDM_JH_HS WHERE XH = VI_HYXH)))               ;ELSE      insert into TMP_GT3_sbfgl_WJSTJB    SELECT  NSR.NSRSBH,                    NSR.NSRMC,                    NSR.SCJYDZ,                    case                      when NSRKZ.FDDBRYDDH is not null then                       '法人' || NSRKZ.FDDBRYDDH                      else                       ''                    end || case                      when NSRKZ.SWDLRLXDH is not null then                       ',税务代理人' || NSRKZ.SWDLRLXDH                      else                       ''                    end || case                      when NSRKZ.BSRYDDH is not null then                       ',办税人' || NSRKZ.BSRYDDH                      else                       ''                    end AS FDDBRGDDH,                    F.SWJGMC,                    G.SWJGMC      FROM AP_CXBB_GT3_SBFAQYYIJSTJ_cs B ,           H_DJ_NSRXX           NSR,           H_DJ_NSRXX_KZ        NSRKZ,           DM_GY_SWJG_JH F,           DM_GY_SWJG_JH G                WHERE NSR.ZGSWJ_DM = F.SWJG_DM(+)       AND B.SWJGDM = G.SWJG_DM(+)       AND B.DJXH = NSR.DJXH(+)       AND B.DJXH = NSRKZ.DJXH(+)       AND ( B.SWJGDM IN               (SELECT SWJG_DM                  FROM DM_GY_SWJG_JH V                 START WITH V.SWJG_DM IN (PV_ZGSWJG)                CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM))        AND (VI_HYXH = 0 OR               NSR.HY_DM IN               (SELECT HY_DM                   FROM DM_HY_JH                  WHERE DL IN                        (SELECT HYDM FROM TEMP_HYDM_JH_HS WHERE XH = VI_HYXH)))                 ;       END IF ;    OPEN OUT_RECORD FOR    select * from TMP_GT3_sbfgl_WJSTJB A;  ------------------------------------------------------------------------------------------END AP_CXBB_GT3_SBFGL_SBFYJSQC;

代码前部分

PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR,   PI_XH PLS_INTEGER, PV_ZGSWJG  VARCHAR2 --管理单位 --PI_HSND    PLS_INTEGER, --汇算年度 --QR_HYDM    PLS_INTEGER --行业 ) AS   VI_HYXH PLS_INTEGER ;
 

首先我们定义了 一个存储过程 AP_CXBB_GT3_SBFGL_SBFYJSQC

附注:创建 存储过程 PROCEDURE的语句为 create or replace  PROCEDURE

如上:我们定义了SYS_REFCURSOR游标类型的输出变量OUT_RECORD , PLS_INTEGER整数类型输入参数PI_XH, 和VARCHAR2字符串类型的输入参数PV_ZGSWJG 

还有一个PLS_INTEGER类型变量 VI_HYXH  

VI_HYXH:=NVL(PI_XH ,0);

 

接着我们对变量赋值,注意 orale赋值符号为 :=   而不是 = ,其中nvl为判断参数是否空并做处理的内置函数 

从begin 到end的代码块实现的业务流程我简单介绍下

1.删除临时表数据

2.将需要的数据存到临时表

3.将临时表数据放到游标输出

在写业务复杂的存储过程时,我们时常会用到临时表,游标。

 

 

 

下一章介绍该存储过程的 sql语句

 

转载于:https://www.cnblogs.com/lanxiamo/p/7218161.html

你可能感兴趣的文章
pyqt 滚动条 美化_Pyqt5 关于流式布局和滚动条的综合使用示例代码
查看>>
51单机片 编译hex_单片机爬坑记-05-编译环境(完)
查看>>
java 正则表达式 img_Java正则表达式获得html字符串里的<img src=""/> 中的url列表
查看>>
java 文件crc校验_一个获取文件crc32校验码的简洁的java类 | 学步园
查看>>
java flatmapfunction_Java8 Stream flatmap中间操作用法解析
查看>>
java rmi spring 4.0_Java Spring RMI一些尝试
查看>>
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
查看>>
java牛客网四则运算_数据库刷题—牛客网(51-61)
查看>>
Java get set6_JDK6的新特性(转)
查看>>
java发送邮件 不登陆_Java邮件到Exchange Server“不支持登录方法”
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
关于监控工具的主动发起性能测试
查看>>
我的友情链接
查看>>
OpenSSL学习(十六):基础-指令rand
查看>>
KeyMob致力于打造国内领先的移动广告平台
查看>>
路由选路原则
查看>>
jvm 学习(一)
查看>>