接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解
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语句
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)