存储过程

oracle存储过程

戏子无情 提交于 2019-12-30 23:37:26
1、创建存储过程规范 CREATE OR REPLACE PROCEDURE 存储过程名字(参数1 IN varchar,参数2 OUT NUMBER) IS –定义变量 V_LOG ETL_PROCLOG%ROWTYPE; 取与表ETL_PROCLOG的字段作为变量V_LOG的属性,赋值时或取值时 打点.取值或赋值 变量1 INTEGER :=0; :=初始化变量 变量2 DATE; BEGIN dbms_output.put_line(‘开始执行存储过程’); –执行体 SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION dbms_output.put_line(‘存储过程错误处理’); END 存储过程名字; 2、创建日志表 新建一张表(PROC_LOG)用于存储存储过程的执行情况信息: create table PROC_LOG{ procDate varchar2(10), --存储过程执行日期 procName varchar2(100), --存储过程名称 stepNumber varchar2(10), --存储过程执行的步数 numRow number(20), --存储过程每一步影响的行数 dealStartTime varchar2(10), --存储过程每一步执行的开始时间

[ 转载 ] ORACLE存储过程

不打扰是莪最后的温柔 提交于 2019-12-30 16:46:28
一.什么是存储过程 存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。 简单的说就是专门干一件事一段sql语句。 可以由数据库自己去调用,也可以由java程序去调用。 在oracle数据库中存储过程是procedure。 二.为什么要写存储过程 1.效率高 存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而普通的sql语句我们要保存到其他地方(例如:记事本 上),都要先分析编译才会执行。所以想对而言存储过程效率更高。 2.降低网络流量 存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。 3.复用性高 存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。 4.可维护性高 当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。 5.安全性高 完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。 三.存储过程基础 1.存储过程结构 (1).基本结构 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写

mssql死锁问题

我的未来我决定 提交于 2019-12-29 22:29:17
在网上查看了很多死锁与阻塞的资料,为什么会出现死锁或者阻塞? 阻塞在大数据量的数据库中经常出现,在我现在的其中一个项目出现的频率很高,根据网上查到死锁跟阻塞的资料,当时分析出来,主要是多台设备同时调用某个程序,某个程序每隔,2分钟就会去调用存储a更新现在看板里面的数据。出现阻塞的原因就是存储a。存储a以某个仓库为条件,输出数据到看板中,就会出现阻塞。因为执行这条存储耗时15s。而且该存储关联到的表起码有7,8张,而且还是数据量比较大的表。这样就就造成阻塞。现在将这次阻塞查到的一些资料+使用的东西,在此写随笔笔记。 sp_who active --看看哪个引起的阻塞,blk sp_lock --看看锁住了那个资源id,objid ,select object_name(objid) 得到 dbcc inputbuffer(@blk) -- 看看是那个语句 从上面语句就能查看到那个语句引起阻塞。就可以去优化,看看该语句设计是否可行与优化。 从网上也看到了一些死锁的资料与原作者写的一些很有用的存储过程: 如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程? 这时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQL Server自带的系统存储过程sp_who和sp_lock也可以用来查找阻塞和死锁, 但没有这里介绍的方法好用。 use

变量定义oracle存储过程中-----PLS-00103:出现符号“/”在需要下列之一时:(

天大地大妈咪最大 提交于 2019-12-29 21:57:22
今天笔者几篇文章介绍了改变量定义的文章. 关联文章的地址 oracle中编写一存储进程:涌现如下错误, PLS-00103:涌现符号“/”在需要以下之一时:( 经过各种谷歌百度,在存储进程中定义变量不允许应用关键字,而我定义了变量sum,导致错误。 经过编译后的进程代码为: create or replace procedure avg_sal(result out char) is i number(5); summ number(20); countnum number(20); begin i:=10; while i<40 loop i:= i+10; select sum(salary),count(*) into summ countnum from emp where deptno=i; result:=summ/countnum; end loop; end; / 每日一道理 记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命承诺的余音,感到岁月的流转在渐渐稀释我的年少无知,我愿自己是一只上足了发条的时钟,在昼夜不停的流转中留下自己充实的每一刻。 declare i number(5); sum_sal number(20); begin i:=10; loop exit when(i>30);

从0开始学存储过程(一)

别等时光非礼了梦想. 提交于 2019-12-29 18:10:04
一、定义 存储过程(Stored Procedure)简单来讲就是一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 注意 : 1.大家可以使用MySQL命令创建学习,这里我使用sqlyog工具进行讲解。 2.对于初学者来说刚接触不知道在哪里创建存储语句,以sqlyog为例,打开数据 库就能看到存储过程的文件夹,在此文件夹上创建存储过程即可,至于怎么调用,下面听我一一道来。 3.在一个存储过程中可以调用另一个存储过程,但不能删除另一个存储过程。 二、基本语法 1. 创建存储过程 drop procedure if exists proName ; ---proName存储过程名,如果存在则删除 delimiter // ---这个‘//’是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“$$”等。 create procedure proName ( ) ---procedure创建存储过程的关键字 proName存储过程名 begin . . . ---SQL代码(一般放在begin和end之间) end // ---end代码SQL语句结束了,//代表整个过程结束了 delimiter ; --

Mysql中的存储过程

偶尔善良 提交于 2019-12-28 19:55:41
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法; ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用; 有哪些特性 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能; 函数的普遍特性:模块化,封装,代码复用; 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤; 创建一个简单的存储过程 存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum; 几点说明: DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。 DEFINER:创建者; -- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_adder`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE

MySQL存储过程的创建及调用

≯℡__Kan透↙ 提交于 2019-12-28 19:55:24
阅读目录: MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本”     1. 创建存储过程     2. 调用存储过程     3. 存储过程体     4. 语句块标签 存储过程的参数     1. in :向过程里传参     2. out :过程向外传参值     3. inout :in and out # SQL语句:先编译后执行 存储过程(Stored Procedure):   一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 优点 ( 为什么要用存储过程? ):   ①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用   ②批量处理:SQL+循环,减少流量,也就是 “跑批”   ③ 统一接口 ,确保数据的安全 相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。 一、存储过程的创建和调用   >存储过程就是具有名字的一段代码,用来完成一个特定的功能。   >创建的存储过程保存在数据库的数据字典中。 1、创建存储过程 CREATE [DEFINER = { user | CURRENT_USER }]  PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic

库存台帐报表存储过程

别来无恙 提交于 2019-12-28 19:54:57
库存台帐报表存储过程,包含While语句,两次循环,原理很简单,但是提供了两次循环的操作方法。 1 -- ---------------------------------- 2 -- 用途:查询,统计,用于库存台帐 3 -- ---------------------------------- 4 CREATE PROCEDURE dbo.Jmeport_get_storage_price 5 6 @maxGoodsCode varchar ( 10 ), -- 商品编码大 7 @minGoodsCode varchar ( 10 ), -- 商品编码小 8 @StartTime datetime , -- 日期大 9 @EndTime datetime , -- 日期小 10 @maxStorage varchar ( 10 ), -- 仓库编码大 11 @minStorage varchar ( 10 ) -- 仓库编码小 12 13 AS 14 SET NOCOUNT ON 15 declare @SQL nvarchar ( 2000 ) 16 17 CREATE TABLE #A(goodsnumber varchar ( 10 ),goodsname varchar ( 20 ),goodstype varchar ( 20 ),dept varchar ( 10 )

存储过程

允我心安 提交于 2019-12-28 19:51:29
/*关联父级ID*/ declare l_sql varchar2(200); begin for tt in(select a.orgid,substr(a.yab003,0,9) yab003 from TAORG_TEMP a where/* a.porgid='100043' and a.orgid='100116' and*/ a.orglevel='5') loop l_sql:='update TAORG_TEMP t set t.porgid = :a where t.orgid != :b and substr(t.yab003,0,9) = :c'; execute immediate l_sql using tt.orgid,tt.orgid,tt.yab003; commit; end loop; end; /*设置树结构路径*/ declare l_id_str varchar2(200); l_name_str varchar2(500); l_sql varchar2(500); begin for pp in ( select t.orgid from TAORG_TEMP t/* where t.orgid=1*/ ) loop l_id_str:=''; l_name_str:=''; for tt in ( select t.orgid,t

存储过程,sql中分割(如‘,’,‘-’等)

风流意气都作罢 提交于 2019-12-28 03:19:29
1. 产妇信息 2. 产检项目表 3. 产检时间表 存储过程:添加一个产妇信息时,为产检时间表添加关联产检项目的数据 和触发器有些类似点 CREATE DEFINER=`root`@`%` PROCEDURE `ms_cfcj`(IN ORGID VARCHAR (64),IN ORGNAME VARCHAR (64),IN CUNID VARCHAR (64),IN CUNNAME VARCHAR (64),IN CFXM VARCHAR (64),IN LXFS VARCHAR (64),IN HYRQ VARCHAR (64), IN SFZ VARCHAR (64),IN YYMC VARCHAR(64)) BEGIN #产妇信息主键id DECLARE CFXXID VARCHAR(64); #产妇信息产检时间表主键id DECLARE CJSJID VARCHAR(64); #判断游标数据是否查完 DECLARE flag INT DEFAULT 1; #孕期结束时间记录 DECLARE HYRQ_END VARCHAR(64); #产检项目截止日期 DECLARE CJXMSJ_END VARCHAR(64); DECLARE MS_CJZQ VARCHAR(64); DECLARE MS_XMID VARCHAR(64); #DECLARE MS_CJXM