自己的第一个存储过程

  1 create proc [dbo].[udp_D8RsEidtDptInfo]
  2  @DptSysID varchar(36),                        --部门系统编号(参数)
  3  @DptParentSysID varchar(36),                --上级部门编号(参数)
  4  @DptPrcNo varchar(60),                        --节点深度编号(参数)
  5  @DptNo varchar(30),                        --部门编号(参数)
  6  @DptName varchar(60),                        --部门名称(参数)
  7  @DptDesc varchar(250)                        --部门描述(参数)
  8  as
  9     declare @top_DptSysID varchar(36)            --上级部门的部门系统编号
 10     declare @top_DptPrcNo varchar(60)            --上级部门的节点深度编号
 11     declare @top_DptNo varchar(30)                --上级部门的部门编号
 12     declare @top_DptName varchar(60)            --上级部门的部门名称
 13
 14     declare @_DptParentSysID varchar(36)        --修改之前的父级部门系统编号
 15     declare @_DptPrcNo varchar(60)                --当前需要修改的部门节点深度编号
 16     declare @itemCount int                        --当前部门的子部门数
 17
 18         --存储未修改部门之前的父级部门
 19         select @_DptParentSysID = (select DptParentSysID from RS_Dpt where DptSysID=@DptSysID)
 20         select @_DptPrcNo = (select DptPrcNo from RS_Dpt where DptSysID=@DptSysID)
 21
 22         select @top_DptSysID = @DptParentSysID;  --获取上级部门的系统编号
 23
 24         select
 25         @top_DptPrcNo = DptPrcNo,
 26         @top_DptNo = DptNo,
 27         @top_DptName = DptName
 28         from RS_Dpt
 29         where DptSysID = @DptParentSysID
 30
 31         declare @top_dpnLen int;                    --定义上级部门节点深度的总长度
 32         select @top_dpnLen = len(@top_DptPrcNo);    --赋值其长度↑
 33
 34         declare @DpnNum int;                        --定义部门节点深度的筛选范围
 35         declare @_DpnNum varchar(5);                --定义子部门的伸展字符
 36         declare @New_Dpn varchar(60);                --定义新生成的一个子部门节点深度
 37         declare @isDptPrcNo int;                    --定义用于判断部门编号是否存在
 38
 39         declare @leaveDpnLen int;                    --定义修改当前部门之后的节点深度的总长度
 40         select @leaveDpnLen = len(@DptPrcNo)        --赋值其长度↑
 41
 42         if (@_DptParentSysID <> @DptParentSysID)        --更改上级部门时!
 43         begin
 44             --筛选并填补空缺
 45             set @DpnNum = 1;
 46             while @DpnNum < 1000
 47             begin
 48                 if (@DpnNum <= 999)
 49                 begin
 50                     set @_DpnNum =  replicate(‘0‘,3-len(@DpnNum))+cast(@DpnNum as varchar(5));
 51                     select @New_Dpn = @top_DptPrcNo + @_DpnNum;
 52                     select @isDptPrcNo = (select count(DptSysID) from RS_Dpt where DptPrcNo = @New_Dpn)
 53                         if (@isDptPrcNo = 0 and @DpnNum <= 999)
 54                         begin
 55                             select @_DptPrcNo = @New_Dpn;
 56                                 break;
 57                         end
 58                     set @DpnNum += 1
 59                 end
 60             end
 61
 62         --更新
 63         update RS_Dpt set DptParentSysID = @DptParentSysID,
 64             DptPrcNo = @_DptPrcNo,
 65             DptNo = @DptNo,
 66             DptName = @DptName,
 67             DptDesc = @DptDesc
 68         where DptSysID = @DptSysID
 69
 70         declare @isNull int;                    --是否存在部门
 71         set @isNull = 0;                        --默认为0:不存在、1:存在
 72                     --判断其部门是否存在子部门
 73                     if exists(select DptSysID,
 74                         DptParentSysID,
 75                         DptPrcNo,
 76                         DptNo,
 77                         DptName,
 78                         DptDesc
 79                     from RS_Dpt where DptPrcNo like @DptPrcNo + ‘%‘and DptPrcNo <> @DptPrcNo )
 80                     begin
 81                         select @isNull = 1;
 82                     end
 83                     else
 84                     begin
 85                         select @isNull = @isNull;
 86                     end
 87         declare @itemDpn varchar(60)
 88         declare @itemnum int
 89         set @itemnum = 1
 90             if(@isNull = 1)            --存在子部门时
 91             begin
 92                 select DptSysID, DptParentSysID,
 93                         DptPrcNo, DptNo,
 94                         DptName, DptDesc,
 95                         identity(int,1,1) as item into #_RS_Dpt
 96                 from RS_Dpt where DptPrcNo like @DptPrcNo + ‘%‘and DptPrcNo <> @DptPrcNo order by DptPrcNo
 97
 98                 select @itemCount = (select count(item) from #_RS_Dpt)
 99
100                 while @itemnum < @itemCount+1
101                 begin
102                     if @itemnum < @itemCount + 1
103                     begin
104                     select @itemDpn = @_DptPrcNo + substring((select DptPrcNo from #_RS_Dpt where item = @itemnum),
105                                         @leaveDpnLen+1,
106                                         len((select DptPrcNo from #_RS_Dpt where item = @itemnum))-@leaveDpnLen)
107                     declare @_RS_DptSysID varchar(36)
108                     select @_RS_DptSysID = (select DptSysID from #_RS_Dpt where item = @itemnum)
109                     select @itemnum +=1
110                     update RS_Dpt set DptPrcNo = @itemDpn where DptSysID = @_RS_DptSysID
111                     end
112                     else begin
113                     break
114                     end
115                 end
116             end
117         end
118         else if (@_DptParentSysID = @DptParentSysID)            --不更改上级部门时!
119         begin
120             --更新
121             update RS_Dpt set DptPrcNo = @_DptPrcNo,
122                 DptNo = @DptNo,
123                 DptName = @DptName,
124                 DptDesc = @DptDesc
125             where DptSysID = @DptSysID
126         end

用于修改部门所用。

时间: 2024-12-28 14:18:50

自己的第一个存储过程的相关文章

oracle学习之第一个存储过程:打印Hello World

数据库对象:表.视图.索引.序列.同义词.存储过程.存储函数 存储过程:指的是存储在数据库中供全部用户程序调用的子程序叫存储过程.存储函数 存储过程和存储函数的同样点:完毕特定功能的程序 存储过程和存储函数的差别:是否用return语句返回值(存储函数能够,可是存储过程不行) --第一个存储过程:打印Hello World /* 调用存储过程2种方式: 1.exec sayhelloworld(); 2.begin sayhelloworld(); sayhelloworld(); end; /

第一个存储过程

BEGIN #Routine body goes here... DECLARE vec_title VARCHAR(50) DEFAULT ""; DECLARE vec_content VARCHAR(2000) DEFAULT ""; DECLARE int_attach_id INT DEFAULT 0; DECLARE date_send_time DATETIME; DECLARE _DONE int default 0; DECLARE cur CUR

第一个存储过程程序

以前没用过存储过程,最近实习看到项目里的人在用,自己学了一点,写了个简单的,发现真的是个好东西,下面主要用来向数据库插入999条记录.以后要好好学习. CREATE PROCEDURE dbo.sp_InsertBatch /* ( @parameter1 int = 5, @parameter2 datatype OUTPUT ) */ AS /* SET NOCOUNT ON */ BEGIN TRAN DECLARE @index INT; DECLARE @name VARCHAR(50

我的第一个存储过程

create or replace PROCEDURE PROC_REPORTBACK (HISEXAMNO varchar2,--申请单号 US_SEE varchar2,--超声提示 US_RESULT varchar2) --超声所见 AS l_US_SEE varchar2(200);--超声提示 l_US_RESULT varchar2(200);--超声所见 BEGIN l_US_SEE:= US_SEE ; l_US_RESULT:= US_RESULT ; UPDATE PACS

Oracle系列:(29)存储过程和存储函数

1.存储过程[procedure] 什么是存储过程? 事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类似于Java中的函数. 为什么要用存储过程? (1)PLSQL每次执行都要整体运行一遍,才有结果 (2)PLSQL不能将其封装起来,长期保存在oracle服务器中 (3)PLSQL不能被其它应用程序调用,例如:Java 存储过程与PLSQL是什么关系? 存储过程是PLSQL的一个方面的应用

存储过程学习

我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集合的选择等等 1.存储过程结构 1.1 第一个存储过程 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 in out varchar2 )as v_name varchar2(20)

存储过程

本人今天写的第一个存储过程 1 create or replace procedure proc_search_table as 2 var_owner varchar2(100):=''; 3 var_name varchar2(100):=''; 4 var_exists varchar2(10):='0'; 5 cursor mycur is 6 SELECT OWNER,table_name FROM DBA_TABLES t where t.OWNER in ('ZXJS','GNU_

MySQL存储过程初遇

我用记事本写了一个简单的存储过程如下: delimiter$$ create procedure show_users() comment '查看market数据库中的user表中的所有信息' begin select * from user; END$$ delimiter; 保存为show_users.sql 执行(show_users.sql在工作目录,如果不在请加上绝对路径): mysql> source show_users.sql 发生错误信息为: ERROR 1064 (42000

oracle存储过程--在应用程序中访问存储过程程序完整举例

认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: * 存储过程和函数以命名的数据库对象形式存储于数据库当中.存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码. * 存储过程和函数可由数据库提供安全保证,要想