存储过程是一组为了完成特定功能的sql语句集,存储在数据库中,经过一次编译后再次调用不需要编译。用户通过指定存储过程的名字来执行它。

  基本语法:

    create or replace procedure  procedure_01

    is//一直纠结这里是is还是as,查资料后发现:在存储过程(procedure)和函数(function)中没有区别。在视图(view)中只能用as不能用is,在游标(cursor)中只能用is,不能用as。

    begin

     //要执行的代码行

    commit;

    end  procedure_01;

    

  调用存储过程:

  call   procedure_01();//注意括号不可省略。创建的时候不用加,调用的时候必需加上。

  

  *前两天公司给安排了一个任务,要求写一个存储过程,循环遍历所有表,找出所有业务已经完成的记录,即status='11'的记录插入到历史表中,并删除原表中的记录。

  记录下来,方便日后查询。历史表与原表的区别就是多了‘_H’。

  create or replace procedure insertH

  is

  begin

    insert into TW_ZNDW_TASK_MAIN_H select * from TW_ZNDW_TAKS_MAIN where status='11';

    delete from TW_ZNDW_TAKS_MAIN T where status = '11' and EXISTS(select 1 from TW_ZNDW_TASK_MAIN_H H where T.id = H.id);

    //exists是判断后面的sql语句是否为真,若为真则整个sql句子成立,否则没有任何记录。这句话的意思就是在删除原表记录之前先判断一下是否已经插入到了历史表中

    //有时候为了提高效率,只是测试下某个表中是否存在记录,就用1来代替。

  commit;

  end insertH;

  call insertH();

  //上述代码只是插入一张表的记录。后面查了资料,学习了怎么循环遍历所有表,接下来分享完整代码。

  create or replace procedure insertHistory

  is

    tableName1  varchar2(100);

    tableName2  varchar2(100);

    sqlstr        varchar2(500);

      cursor   tableNameAll is Select table_name FROM USER_TABLES where regexp_like(table_name,'^TW_ZNDW_TASK_[0-9]+$') or table_name = 'TW_ZNDW_TASK';

    //游标cursor,这里只能用is来赋值。USER_TABLES是系统表,使用USER_TABLES可查询所有的table_name字段。

  begin

    for tableName in tableNameAll loop

      begin

        tableName1 := tableName.table_name;//这里赋值用:=冒号加等号的形式赋值,tableName是形参,用来获取table_name赋值给tableName1;

        tableName2 := tableName1+'_H';

        sqlstr := 'insert into' || tableName2 || 'select * from' || tableName1 || 'where status='' 11'' ';//连接符号用||,也可以用+。

        EXECUTE IMMEDIATE sqlstr;  //表示立即执行该语句。

        sqlstr := 'delete from' tableName1 || 'where status=''11'' and exists (select 1 from' || tableName2 || 't2 where t1.id = t2.id'  )';

        EXECUTE IMMEDIATE sqlstr;

        commit;

      end;

    end loop;

  end insertHistory;

调用:call insertHistory();

*另外一个任务,初始化部分数据。之所以把这个任务放在这里,是因为这是优化之后的代码,刚接手这个任务的时候我是一条一条记录来插入删除的,后来请教了组长才明白这么回事,可以动态执行。感觉跟存储过程有异曲同工之妙。

  

--删除历史数据
DELETE from TW_PROD_ELEC_RULE_CONFIG where RULE_TYPE='退服指标自动稽核算法';
--插入移动数据
INSERT INTO TW_PROD_ELEC_RULE_CONFIG
select
rawtohex(sys_guid()), o.ORGCODE, o.ORGNAME, NULL, NULL, NULL, NULL, '剔除免责站址数据,剔除夜间免责,未购买发电服务站址停电保够3小时的退服不纳入统计,运营商申告工单', '剔除免责站址数据 ,剔除夜间免责 ,未购买发电服务站址停电保够3小时的退服不纳入统计 ,运营商申告工单', '2', 'sa', sysdate, NULL, NULL, NULL, NULL, NULL, NULL, '退服指标自动稽核算法', '1001'
from BAF_ORG_ORGANIZATION o
where OBJECTTYPEID='3'
and (
o.ORGNAME like '%四川%'
or o.ORGNAME like '%河南%'
or o.ORGNAME like '%江苏%'
);
INSERT INTO TW_PROD_ELEC_RULE_CONFIG
select
rawtohex(sys_guid())as id,P_ORGID,P_ORGNAME,C_ORGID,C_ORGNAME,A_ORGID,A_ORGNAME,RULE_INFO,RULE_INFO_TEXT,STATUS,CREATE_USER,CREATE_DATE,
UPDATE_DATE,UPDATE_USER,COL1,COL2,COL3,RULE_COL_CHECK,RULE_TYPE,'1002' RETIREMENT_SCOPE
from TW_PROD_ELEC_RULE_CONFIG where RULE_TYPE='退服指标自动稽核算法'
UNION
select
rawtohex(sys_guid())as id,P_ORGID,P_ORGNAME,C_ORGID,C_ORGNAME,A_ORGID,A_ORGNAME,RULE_INFO,RULE_INFO_TEXT,STATUS,CREATE_USER,CREATE_DATE,
UPDATE_DATE,UPDATE_USER,COL1,COL2,COL3,RULE_COL_CHECK,RULE_TYPE,'1003' RETIREMENT_SCOPE
from TW_PROD_ELEC_RULE_CONFIG where RULE_TYPE='退服指标自动稽核算法';

*补充:

//union 和 union all都要求两个sql查询列要相同;
//union:联合查询出并集(会去除重复记录);
//union all:联合查询出并集,包含重复记录;

【oracle笔记4】存储过程的更多相关文章

  1. Oracle笔记 目录索引

    Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...

  2. 韩顺平Oracle笔记

    韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring   目录(?)[-] ...

  3. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  4. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  5. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  6. Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例

    <Oracle dbms_lock.sleep()存储过程使用技巧>-场景-分析-实例 摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会.会议的结尾一名开发工程师找到了我 ...

  7. oracle 中的存储过程

      oracle 中的存储过程 --oracle 中的存储过程, --不带任何参数的 CREATE OR REPLACE PROCEDURE PRO_TEST AS -- AS 和is 没有任何区别 ...

  8. 【转】Oracle job procedure 存储过程定时任务

    原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相 ...

  9. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  10. oracle函数和存储过程有什么区别

    oracle函数和存储过程有什么区别 1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数 ...

随机推荐

  1. Strapi 安装易错位置

    Strapi官网(https://strapi.io)介绍:最先进的开源内容管理框架,可以毫不费力地构建功能强大的API,建立在Node.js平台之上,为您的API提供高速惊人的表现. 简单点说,(对 ...

  2. 2D平面中关于矩阵(Matrix)跟图形变换的讲解

    在二维平面上,常用的有以下三种基本的图形变化: 1)Translation 2)Scale 3)Rotation 在canvas的开发中,我们也经常会用到这样的一些图形变换,尤其是我们在写自定义Vie ...

  3. 在WinServer上安装小红伞杀毒软件的经验总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在WinServer2008或WinServer2012不能直接安装小红伞杀毒软件的免费版,需要安装服务器版.我手头并 ...

  4. <Android Framework 之路>BootAnimation(1)

    介绍 开机动画,BootAnimation,就是Android手机开机郭晨各种以一个展示给用户的界面,实际是一个多个帧组成的动画,在界面上进行一帧一帧的播放,形成开机动画的效果. 本文针对Androi ...

  5. androidwebview网页显示事件

    @Overridepublic void onPageCommitVisible(WebView view, String url) { super.onPageCommitVisible(view, ...

  6. Ubuntu14.04下如何安装Python爬虫框架Scrapy

    按照官方文档的说明,安装scrapy 需要以下程序或者库: (1).Python 2.7 (2).lxml. Most linux distributions ships PRepackaged ve ...

  7. csdn中使用Git的一些注意问题

    1.生成的密钥必须在当前用户文档目录下的.ssh文件夹.----否则不行 2.生成的密钥文件命名---必须命名为id_ras文件----否则不行

  8. 【Leetcode】【Medium】Subsets II

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...

  9. 设计模式:Builder模式

    设计模式:Builder模式 一.前言    今天我们讨论一下Builder建造者模式,这个Builder,其实和模板模式非常的像,但是也有区别,那就是在模板模式中父类对子类中的实现进行操作,在父类之 ...

  10. ZT C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]

    http://bbs.csdn.net/topics/370153775 [置顶] [推荐] C,C++表达式求值顺序 裘老的解释. [问题点数:300分] 最近这问题有从日经变时经的趋势,这里贴出裘 ...