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

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语句

oracle存储过程及sql优化-(二)的更多相关文章

  1. oracle存储过程及sql优化-(一)

             本篇主要介绍存储过程的结构 先简单介绍下: oracle存储过程与函数不同,oracle函数和存储过程都可以有多个输入,但是函数一般只有一个输出,而oracle可以有多个输出且与输入 ...

  2. oracle存储过程及sql优化-(三)

    接下来介绍上篇接触到的存储过程中的sql语句 insert into TMP_GT3_sbfgl_WJSTJB SELECT NSR.NSRSBH, NSR.NSRMC, NSR.SCJYDZ, ca ...

  3. oracle 存储过程 动态sql语句

    一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写:   insert into clobTable (id, story) values(1,'....'); ...

  4. oracle中的SQL优化

    一.SQL语言的使用1.IN 操作符    用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.    但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  5. oracle PL、SQL(二)

    oracle PL.SQL(基础知识点二) --1,参数 in:表示输入类型,可以省略 :out:输出类型不能省略---------- ----案例1:编写一个过程,可以输入雇员的编号,返回该雇员的姓 ...

  6. oracle存储过程,sql语句执行时间

    create or replace procedure sum_info is i integer; temp1 varchar2(50); temp2 varchar2(50); t1 date; ...

  7. 【学亮开讲】Oracle存储过程教学笔记(二)20181116

    --带出参的存储过程的创建和调用 create or replace procedure pro_owners_add1 ( v_name varchar2,--名称 v_addressid numb ...

  8. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  9. 对oracle中SQL优化的理解

    Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统 ...

随机推荐

  1. 十大经典排序算法(Python,Java实现)

    参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...

  2. ACM的一点基础知识

    所摘内容来自于XJTU小学期ACM培训PPT log 默认以2为底 计算机一秒可以看作1e8次 保证数据计算精度及数据所需必要大小 a=1LL*a*a%p//在计算时通过乘以1LL,临时将Int转化为 ...

  3. 创建全文索引----SQLserver

    1.启动 Microsoft Search 服务 开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft Search 服务-->启动它. 2. ...

  4. todo 看看堆栈里的东西

    类变量,成员变量,静态方法里的变量.参数,成员方法里的变量,参数

  5. 多线程的些许理解(平台x86,具体考虑linux,windows)

    多线程的些许理解 一.体系架构 1.原子操作 1) 定义 不可中断的一个或者一系列操作,也就是不会被线程调度机制打断的操作,在运行期间不会有任何的上下文切换(context switch). 2) 我 ...

  6. openstack mitaka开启三层网络vxlan

    在这之前,先把之前基于flat模式创建的虚机,全部删除 控制节点: 配置 修改/etc/neutron/neutron.conf的[DEFAULT]区域 将 core_plugin = ml2 ser ...

  7. 会了docker你又多了一个谈资(下)

    上篇文章介绍了docker 基本使用及安装([跳转☞会了docker你又多了一个谈资(上)],这篇重点说明下docker使用技巧. 问题1怎么用docker搭建多台服务器? 只需要 docker ru ...

  8. LogHelper

    原文链接 public class LogHelper { static string strLogCOMPath = Directory.GetCurrentDirectory() + " ...

  9. solr 基础

    solr高亮设置以及摘要 https://www.cnblogs.com/rainbowzc/p/3680343.html java操作solr基本方法 https://blog.csdn.net/z ...

  10. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...