`

存储过程的学习笔记

 
阅读更多

create procedure pro_stu(

    @ pageIndex int,

    @ pageSize int====>是存储过程的参数

 ) as   --------〉as 前后

declare @name vchar====> 是变量

 ###多条件查询: set @week= case when 返回的结果

<!--StartFragment -->
declare @today int  
2.declare @week nvarchar(3)  
3.set @today=3  
4.set @week= case  
5.     when @today=1 then '星期一'  
6.     when @today=2 then '星期二'  
7.     when @today=3 then '星期三'  
8.     when @today=4 then '星期四'  
9.     when @today=5 then '星期五'  
10.     when @today=6 then '星期六'  
11.     when @today=7 then '星期日'  
12.     else '值错误'  
13.end  

 

 

####

转自:  http://uule.iteye.com/blog/1988137

SQLServer - 存储过程基本语法

博客分类:

 

 

oracle的建表sql转成sqlserver的建表sql时的注意点 :
1.所有的comment语句需要删除。
2.clob类型转换为text类型。
3.blob类型转换为image类型。
4.number类型转换为int,number(16,2)等转换为decimal(16,2),number(18)转换为bigint。
5.default sysdate改为default getDate()。
6.to_date('2009-12-18','yyyy-mm-dd')改为cast('2009-12-18'  as   datetime)

SQLSERVER:
变量的声明:
声明变量时必须在变量前加@符号
DECLARE @I INT

变量的赋值:
变量赋值时变量前必须加set
SET @I = 30

声明多个变量:
DECLARE @s varchar(10),@a INT

if语句:

Java代码 复制代码 收藏代码
  1. if ..  
  2. begin  
  3.   ...  
  4. end  
  5. else if ..  
  6. begin  
  7.   ...  
  8. end  
  9. else  
  10. begin  
  11.   ...  
  12. end   
if ..
begin
  ...
end
else if ..
begin
  ...
end
else
begin
  ...
end 

 Example:

Sql代码 复制代码 收藏代码
  1. DECLARE @d INT  
  2. set @d = 1  
  3. IF @d = 1 BEGIN  
  4.    PRINT '正确'  
  5. END  
  6. ELSE BEGIN  
  7.    PRINT '错误'  
  8. END  
DECLARE @d INT
set @d = 1
IF @d = 1 BEGIN
   PRINT '正确'
END
ELSE BEGIN
   PRINT '错误'
END

 
多条件选择语句:
Example:

Sql代码 复制代码 收藏代码
  1. declare @today int  
  2. declare @week nvarchar(3)  
  3. set @today=3  
  4. set @week= case  
  5.      when @today=1 then '星期一'  
  6.      when @today=2 then '星期二'  
  7.      when @today=3 then '星期三'  
  8.      when @today=4 then '星期四'  
  9.      when @today=5 then '星期五'  
  10.      when @today=6 then '星期六'  
  11.      when @today=7 then '星期日'  
  12.      else '值错误'  
  13. end  
  14. print @week  
declare @today int
declare @week nvarchar(3)
set @today=3
set @week= case
     when @today=1 then '星期一'
     when @today=2 then '星期二'
     when @today=3 then '星期三'
     when @today=4 then '星期四'
     when @today=5 then '星期五'
     when @today=6 then '星期六'
     when @today=7 then '星期日'
     else '值错误'
end
print @week

 
循环语句:

Java代码 复制代码 收藏代码
  1. WHILE 条件 BEGIN    
  2. 执行语句  
  3. END    
WHILE 条件 BEGIN  
执行语句
END  

 Example:

Java代码 复制代码 收藏代码
  1. DECLARE @i INT  
  2. SET @i = 1  
  3. WHILE @i<1000000 BEGIN  
  4. set @i=@i+1  
  5. END  
DECLARE @i INT
SET @i = 1
WHILE @i<1000000 BEGIN
set @i=@i+1
END

 

定义游标:

Sql代码 复制代码 收藏代码
  1. DECLARE @cur1 CURSOR FOR SELECT .........  
  2.   
  3. OPEN @cur1  
  4. FETCH NEXT FROM @cur1 INTO 变量  
  5. WHILE(@@FETCH_STATUS=0)  
  6. BEGIN  
  7. 处理.....  
  8. FETCH NEXT FROM @cur1 INTO 变量  
  9. END  
  10. CLOSE @cur1  
  11. DEALLOCATE @cur1   
DECLARE @cur1 CURSOR FOR SELECT .........

OPEN @cur1
FETCH NEXT FROM @cur1 INTO 变量
WHILE(@@FETCH_STATUS=0)
BEGIN
处理.....
FETCH NEXT FROM @cur1 INTO 变量
END
CLOSE @cur1
DEALLOCATE @cur1 

 

Sql代码 复制代码 收藏代码
  1. AS  
  2.   
  3. declare @CATEGORY_CI_TABLENAME VARCHAR(50) =''  
  4. declare @result VARCHAR(2000) = ''  
  5. declare @CI_ID DECIMAL = 0  
  6. declare @num int = 1  
  7. declare @countnum int = 1  
  8.   
  9. BEGIN  
  10. select  @countnum = count(ATTRIBUTE_CONFIG_ID) from T_ATTRIBUTE_CONFIG where CMDB_UPDATE_FLAG= 'Y' and CATEGORY_CODE =@CATEGORY_CODE  
  11.    
  12. IF (@ATTRIBUTE2='A')  
  13.   begin    
  14.         DECLARE MyCursor CURSOR for select ATTRIBUTE_CONFIG_CODE from T_ATTRIBUTE_CONFIG where  CMDB_UPDATE_FLAG= 'Y' and CATEGORY_CODE =@CATEGORY_CODE  
  15.          OPEN MyCursor FETCH NEXT FROM MyCursor INTO @CONFIG_CODE  
  16.                 set @result = @result+@CONFIG_CODE+','  
  17.              WHILE @@FETCH_STATUS = 0  
  18.                     BEGIN  
  19.                     FETCH NEXT FROM MyCursor INTO @CONFIG_CODE  
  20.                     set @num = @num+ 1  
  21.                         if(@num<@countnum)   
  22.                             begin  
  23.                                 set @result = @result+@CONFIG_CODE+','  
  24.                             end   
  25.                         else if(@num=@countnum)   
  26.                              begin  
  27.                                 set @result = @result +@CONFIG_CODE  
  28.                              end   
  29.                     END  
  30.             CLOSE MyCursor   
  31.             DEALLOCATE MyCursor   
  32.         set @result = 'insert into ' + @ATTRIBUTE1 + '(' + @result +') select '+ @result +' from '+@CATEGORY_CI_TABLENAME +' where CI_ORDER_LINE_ID='+@KEY_ID  
  33.   end             
  34.  else if((@ATTRIBUTE2='U'))  
AS

declare @CATEGORY_CI_TABLENAME VARCHAR(50) =''
declare @result VARCHAR(2000) = ''
declare @CI_ID DECIMAL = 0
declare @num int = 1
declare @countnum int = 1

BEGIN
select  @countnum = count(ATTRIBUTE_CONFIG_ID) from T_ATTRIBUTE_CONFIG where CMDB_UPDATE_FLAG= 'Y' and CATEGORY_CODE =@CATEGORY_CODE
 
IF (@ATTRIBUTE2='A')
  begin  
		DECLARE MyCursor CURSOR for select ATTRIBUTE_CONFIG_CODE from T_ATTRIBUTE_CONFIG where  CMDB_UPDATE_FLAG= 'Y' and CATEGORY_CODE =@CATEGORY_CODE
		 OPEN MyCursor FETCH NEXT FROM MyCursor INTO @CONFIG_CODE
				set @result = @result+@CONFIG_CODE+','
			 WHILE @@FETCH_STATUS = 0
					BEGIN
					FETCH NEXT FROM MyCursor INTO @CONFIG_CODE
					set @num = @num+ 1
						if(@num<@countnum) 
							begin
								set @result = @result+@CONFIG_CODE+','
							end 
						else if(@num=@countnum) 
							 begin
								set @result = @result +@CONFIG_CODE
							 end 
					END
			CLOSE MyCursor 
			DEALLOCATE MyCursor 
	    set @result = 'insert into ' + @ATTRIBUTE1 + '(' + @result +') select '+ @result +' from '+@CATEGORY_CI_TABLENAME +' where CI_ORDER_LINE_ID='+@KEY_ID
  end 			
 else if((@ATTRIBUTE2='U'))

 

临时表:

-- Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。
        select * into NewTable
            from Uname

-- Insert INTO ABC Select
        -- 表ABC必须存在
        -- 把表Uname里面的字段Username复制到表ABC
        Insert INTO ABC Select Username FROM Uname

-- 创建临时表
        Create TABLE #temp(
            UID int identity(1, 1) PRIMARY KEY,
            UserName varchar(16),
            Pwd varchar(50),
            Age smallint,
            Sex varchar(6)
        )
       
-- 打开临时表
        Select * from #temp

 

 1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。

临时表对执行效率应该影响不大,只要不是太过份,相反可以提高效率特别是连接查询的地方,只要你的数据库临时表空间足够
游标多,会严重执行效率,能免则免!

 

临时表在不同数据库设计中的作用

SQLSERVER 存储过程 语法

 ===============================================================================

其他:

--有输入参数的存储过程--

create proc GetComment

(@commentid int)

as

select * from Comment where CommentID=@commentid

 

--有输入与输出参数的存储过程--

create proc GetCommentCount

@newsid int,

@count int output

as

select @count=count(*) from Comment where NewsID=@newsid

 

 

--返回单个值的函数--

create function MyFunction

(@newsid int)

returns int

as

begin

declare @count int

select @count=count(*) from Comment where NewsID=@newsid

return @count

end

 

--调用方法--

declare @count int

exec @count=MyFunction 2

print @count

 

--返回值为表的函数--

Create function GetFunctionTable

(@newsid int)

returns table

as

return

(select * from Comment where NewsID=@newsid)

 

--返回值为表的函数的调用--

select * from GetFunctionTable(2)

 

 

-----------------------------------------------------------------------------------------------------------------------------------

SQLServer 存储过程中不拼接SQL字符串实现多条件查询

 以前拼接的写法
  set @sql=' select * from table where 1=1 '
  if (@addDate is not null)
   set @sql = @sql+' and addDate = '+ @addDate + ' '
  if (@name <>'' and is not null)
   set @sql = @sql+ ' and name = ' + @name + ' '
  exec(@sql)
下面是 不采用拼接SQL字符串实现多条件查询的解决方案
  第一种写法是 感觉代码有些冗余
  if (@addDate is not null) and (@name <> '')
   select * from table where addDate = @addDate and name = @name
  else if (@addDate is not null) and (@name ='')
   select * from table where addDate = @addDate
  else if(@addDate is null) and (@name <> '')
   select * from table where and name = @name
  else if(@addDate is null) and (@name = '')
  select * from table
  第二种写法是
  select * from table where (addDate = @addDate or @addDate is null) and (name = @name or @name = '')
  第三种写法是
  SELECT * FROM table where
  addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END,
  name = CASE @name WHEN '' THEN name ELSE @name END

 

-----------------------------------------------------------------------------------------------------------------------------------

 

SQLSERVER存储过程基本语法

 

一、定义变量

--简单赋值
declare @a int
set @a=5
print @a
   
--使用select语句赋值
declare @user1 nvarchar(50)
select @user1= '张三'
print @user1
declare @user2 nvarchar(50)
select @user2 = Name from ST_User where ID=1
print @user2
   
--使用update语句赋值
declare @user3 nvarchar(50)
update ST_User set @user3 = Name where ID=1
print @user3

 

二、表、临时表、表变量

--创建临时表1
create table #DU_User1
(
      [ID] [ int NOT NULL ,
      [Oid] [ int ] NOT NULL ,
      [Login] [nvarchar](50) NOT NULL ,
      [Rtx] [nvarchar](4) NOT NULL ,
      [ Name ] [nvarchar](5) NOT NULL ,
      [ Password ] [nvarchar]( max ) NULL ,
      [State] [nvarchar](8) NOT NULL
);
--向临时表1插入一条记录
insert into #DU_User1 (ID,Oid,[Login],Rtx, Name ,[ Password ],State) values (100,2, 'LS' , '0000' , '临时' , '321' , '特殊' );
   
--从ST_User查询数据,填充至新生成的临时表
select * into #DU_User2 from ST_User where ID<8
   
--查询并联合两临时表
select * from #DU_User2 where ID<3 union select * from #DU_User1
   
--删除两临时表
drop table #DU_User1
drop table #DU_User2
 
--创建临时表
CREATE TABLE #t
(
     [ID] [ int ] NOT NULL ,
     [Oid] [ int ] NOT NULL ,
     [Login] [nvarchar](50) NOT NULL ,
     [Rtx] [nvarchar](4) NOT NULL ,
     [ Name ] [nvarchar](5) NOT NULL ,
     [ Password ] [nvarchar]( max ) NULL ,
     [State] [nvarchar](8) NOT NULL ,
)
   
--将查询结果集(多条数据)插入临时表
insert into #t select * from ST_User
--不能这样插入
--select * into #t from dbo.ST_User
   
--添加一列,为int型自增长子段
alter table #t add [myid] int NOT NULL IDENTITY(1,1)
--添加一列,默认填充全球唯一标识
alter table #t add [myid1] uniqueidentifier NOT NULL default (newid())
   
select * from #t
drop table #t
--给查询结果集增加自增长列
   
--无主键时:
select IDENTITY( int ,1,1) as ID, Name ,[Login],[ Password ] into #t from ST_User
select * from #t
   
--有主键时:
select ( select SUM (1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
--定义表变量
declare @t table
(
     id int not null ,
     msg nvarchar(50) null
)
insert into @t values (1, '1' )
insert into @t values (2, '2' )
select * from @t

 三、循环

--while循环计算1到100的和
declare @a int
declare @ sum int
set @a=1
set @ sum =0
while @a<=100
begin
     set @ sum +=@a
     set @a+=1
end
print @ sum

四、条件语句

--if,else条件分支
if(1+1=2)
begin
     print '对'
end
else
begin
     print '错'
end
   
--when then条件分支
declare @today int
declare @week nvarchar(3)
set @today=3
set @week= case
     when @today=1 then '星期一'
     when @today=2 then '星期二'
     when @today=3 then '星期三'
     when @today=4 then '星期四'
     when @today=5 then '星期五'
     when @today=6 then '星期六'
     when @today=7 then '星期日'
     else '值错误'
end
print @week

 

五、游标

declare @ID int
declare @Oid int
declare @Login varchar (50)
   
--定义一个游标
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打开游标
open user_cur
while @@fetch_status=0
begin
--读取游标
     fetch next from user_cur into @ID,@Oid,@Login
     print @ID
     --print @Login
end
close user_cur
--摧毁游标
deallocate user_cur

六、触发器

   触发器中的临时表:

  Inserted
  存放进行insert和update 操作后的数据
  Deleted
  存放进行delete 和update操作前的数据

--创建触发器
Create trigger User_OnUpdate 
     On ST_User 
     for Update  
As  
     declare @msg nvarchar(50)
     --@msg记录修改情况
     select @msg = N '姓名从“' + Deleted. Name + N '”修改为“' + Inserted. Name + '”' from Inserted,Deleted
     --插入日志表
     insert into [LOG](MSG) values (@msg)
       
--删除触发器
drop trigger User_OnUpdate

七、存储过程

--创建带output参数的存储过程
CREATE PROCEDURE PR_Sum
     @a int ,
     @b int ,
     @ sum int output
AS
BEGIN
     set @ sum =@a+@b
END
   
--创建Return返回值存储过程
CREATE PROCEDURE PR_Sum2
     @a int ,
     @b int
AS
BEGIN
     Return @a+@b
END
       
--执行存储过程获取output型返回值
declare @mysum int
execute PR_Sum 1,2,@mysum output
print @mysum
   
--执行存储过程获取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 1,2
print @mysum2
 

   

八、自定义函数

  函数的分类:

    1)标量值函数

    2)表值函数

        a:内联表值函数

        b:多语句表值函数

    3)系统函数

 

--新建标量值函数
create function FUNC_Sum1
(
     @a int ,
     @b int
)
returns int
as
begin
     return @a+@b
end
   
--新建内联表值函数
create function FUNC_UserTab_1
(
     @myId int
)
returns table
as
return ( select * from ST_User where ID<@myId)
   
--新建多语句表值函数
create function FUNC_UserTab_2
(
     @myId int
)
returns @t table
(
     [ID] [ int ] NOT NULL ,
     [Oid] [ int ] NOT NULL ,
     [Login] [nvarchar](50) NOT NULL ,
     [Rtx] [nvarchar](4) NOT NULL ,
     [ Name ] [nvarchar](5) NOT NULL ,
     [ Password ] [nvarchar]( max ) NULL ,
     [State] [nvarchar](8) NOT NULL
)
as
begin
     insert into @t select * from ST_User where ID<@myId
     return
end
   
--调用表值函数
select * from dbo.FUNC_UserTab_1(15)
--调用标量值函数
declare @s int
set @s=dbo.FUNC_Sum1(100,50)
print @s
   
--删除标量值函数
drop function FUNC_Sum1

谈谈自定义函数与存储过程的区别:

一、自定义函数:

  1. 可以返回表变量

  2. 限制颇多,包括

    不能使用output参数;

    不能用临时表;

    函数内部的操作不能影响到外部环境;

    不能通过select返回结果集;

    不能update,delete,数据库表;

  3. 必须return 一个标量值或表变量

  自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

二、存储过程

  1. 不能返回表变量

  2. 限制少,可以执行对数据库表的操作,可以返回数据集

  3. 可以return一个标量值,也可以省略return

   存储过程一般用在实现复杂的功能,数据操纵方面。

 

-----------------------------------------------------------------------------------------------------------------------------------

SqlServer存储过程--实例

实例1:只返回单一记录集的存储过程。

  表银行存款表(bankMoney)的内容如下

 

Id

userID

Sex

Money

001

Zhangsan

30

002

Wangwu

50

003

Zhangsan

40

 

要求1:查询表bankMoney的内容的存储过程

create procedure sp_query_bankMoney
as
select * from bankMoney
go
exec sp_query_bankMoney

注*  在使用过程中只需要把T-Sql中的SQL语句替换为存储过程名,就可以了很方便吧!

实例2(向存储过程中传递参数):

加入一笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总金额。

Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output
with encryption ---------加密
as
insert into bankMoney (id,userID,sex,Money)
Values(@param1,@param2,@param3, @param4)
select @param5=sum(Money) from bankMoney where userID='Zhangsan'
go
在SQL Server查询分析器中执行该存储过程的方法是:
declare @total_price int
exec insert_bank '004','Zhangsan','男',100,@total_price output
print '总余额为'+convert(varchar,@total_price)
go

在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):

1.以Return传回整数
2.以output格式传回参数
3.Recordset

传回值的区别:

output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。

实例3:使用带有复杂 SELECT 语句的简单过程

  下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。

  USE pubs
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'au_info_all' AND type = 'P')
   DROP PROCEDURE au_info_all
GO
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
   FROM authors a INNER JOIN titleauthor ta
      ON a.au_id = ta.au_id INNER JOIN titles t
      ON t.title_id = ta.title_id INNER JOIN publishers p
      ON t.pub_id = p.pub_id
GO

  au_info_all 存储过程可以通过以下方法执行:

  EXECUTE au_info_all
-- Or
EXEC au_info_all

  如果该过程是批处理中的第一条语句,则可使用:

  au_info_all

实例4:使用带有参数的简单过程

  CREATE PROCEDURE au_info
   @lastname varchar(40),
   @firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
   FROM authors a INNER JOIN titleauthor ta
      ON a.au_id = ta.au_id INNER JOIN titles t
      ON t.title_id = ta.title_id INNER JOIN publishers p
      ON t.pub_id = p.pub_id
   WHERE  au_fname = @firstname
      AND au_lname = @lastname
GO

  au_info 存储过程可以通过以下方法执行:

  EXECUTE au_info 'Dull', 'Ann'
-- Or
EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'
-- Or
EXEC au_info 'Dull', 'Ann'
-- Or
EXEC au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXEC au_info @firstname = 'Ann', @lastname = 'Dull'

  如果该过程是批处理中的第一条语句,则可使用:

  au_info 'Dull', 'Ann'
-- Or
au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
au_info @firstname = 'Ann', @lastname = 'Dull'

 

 实例5:使用带有通配符参数的简单过程

CREATE PROCEDURE au_info2
@lastname varchar(30) = 'D%',
@firstname varchar(18) = '%'
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
   ON a.au_id = ta.au_id INNER JOIN titles t
   ON t.title_id = ta.title_id INNER JOIN publishers p
   ON t.pub_id = p.pub_id
WHERE au_fname LIKE @firstname
   AND au_lname LIKE @lastname
GO

  au_info2 存储过程可以用多种组合执行。下面只列出了部分组合:

  EXECUTE au_info2
-- Or
EXECUTE au_info2 'Wh%'
-- Or
EXECUTE au_info2 @firstname = 'A%'
-- Or
EXECUTE au_info2 '[CK]ars[OE]n'
-- Or
EXECUTE au_info2 'Hunter', 'Sheryl'
-- Or
EXECUTE au_info2 'H%', 'S%'

  = 'proc2'

实例6:if...else

存储过程,其中@case作为执行update的选择依据,用if...else实现执行时根据传入的参数执行不同的修改.
--下面是if……else的存储过程:
if exists (select 1 from sysobjects where name = 'Student' and type ='u' )
drop table Student
go

if exists (select 1 from sysobjects where name = 'spUpdateStudent' and type ='p' )
drop proc spUpdateStudent
go

create table Student
(
fName nvarchar (10),
fAge 

smallint ,
fDiqu varchar (50),
fTel  int
)
go

insert into Student values ('X.X.Y' , 28, 'Tesing' , 888888)
go

create proc spUpdateStudent
(
@fCase int ,
@fName nvarchar (10),
@fAge smallint ,
@fDiqu varchar (50),
@fTel  int
)
as
update Student
set fAge = @fAge, -- 传 1,2,3 都要更新 fAge 不需要用 case
fDiqu = (case when @fCase = 2 or @fCase = 3 then @fDiqu else fDiqu end ),
fTel  = (case when @fCase = 3 then @fTel else fTel end )
where fName = @fName
select * from Student
go

-- 只改 Age
exec spUpdateStudent
@fCase = 1,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel  = 1010101

-- 改 Age 和 Diqu
exec spUpdateStudent
@fCase = 2,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel  = 1010101

-- 全改
exec spUpdateStudent
@fCase = 3,
@fName = N'X.X.Y' ,
@fAge = 80,
@fDiqu = N'Update' ,
@fTel  = 1010101

 

 

#####

不同的数据库中,存储过程中if else 语句写法有一些差别。

如果是SQLServer数据库,存储过程的if, else语句可以这样写:

if a>b
Begin
   print 'a'
End
Else if a<b
Begin
   print 'b'
End
Else 
Begin
    print '代码' 
End

 Oracle 采用下面这种写法:

IF testvalue > 100 THEN
  dbms_output.put_line( '100+' );
ELSIF testvalue = 100 THEN
  dbms_output.put_line( '100' );
ELSE
  dbms_output.put_line( '100-' );
END IF;

 

DB2,  MYSQL  是下面这种写法:  ( 与 Oracle 区别在于那个    ELSIF   )

IF p_val > 100 THEN 
  INSERT INTO output_debug VALUES( '100+' ); 
ELSEIF p_val = 100 THEN 
  INSERT INTO output_debug VALUES( '100' ); 
ELSE 
  INSERT INTO output_debug VALUES( '100-' ); 
END IF;



分享到:
评论

相关推荐

    oracle存储过程学习笔记

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字

    SYBASE IQ存储过程学习笔记

    【SYBASE IQ存储过程学习笔记】 在SYBASE IQ数据库中,存储过程是一种强大的工具,它允许用户编写并存储过程化的SQL语句,以便日后重复使用。存储过程不仅可以包含基本的SQL查询,还能够集成诸如LOOP循环、IF和CASE...

    oracle存储过程学习笔记(四)

    在本篇“Oracle存储过程学习笔记(四)”中,我们将深入探讨存储过程的概念、创建、执行以及在实际应用中的优势。 1. **存储过程的概念** 存储过程是一组预先编译的SQL和PL/SQL语句,存储在数据库服务器中。当需要...

    MySQL视图及存储过程学习笔记

    MySQL视图及存储过程学习笔记

    SybaseIQ存储过程学习笔记

    【Sybase IQ 存储过程详解】 Sybase IQ 是一种高效的数据仓库系统,它支持存储过程,这是一种在数据库中预编译的SQL语句集合,能够提升应用性能并简化复杂操作。存储过程允许用户将一系列操作封装起来,方便重复...

    SQL SERVER 存储过程学习笔记

    这篇学习笔记将深入探讨SQL Server存储过程的基本概念、创建、执行以及其在数据库开发中的应用。 一、存储过程的基本概念 存储过程是数据库中的一个对象,由一系列的SQL语句、控制流语句(如IF-ELSE,WHILE)和变量...

    SQLServer存储过程学习笔记分析PPT教案.pptx

    SQLServer存储过程学习笔记分析PPT教案.pptx

    SQL SERVER 存储过程学习笔记(摘自网络)

    SQL Server 存储过程是数据库管理中的一个重要概念,它是一组预先定义并编译好的T-SQL语句,可以通过指定的名称进行调用执行。存储过程的使用极大地提高了数据库操作的效率和安全性,同时降低了开发人员的工作负担。...

    oracle存储过程 学习笔记

    oracle存储过程 基础知识大全 oracle存储过程分享 实用指数五颗星哈

    oracle学习笔记(从入门到精通)

    压缩包主要包括15个文档,主要是本人学习oracle过程中的笔记,希望对你有帮助:主要文档如下: 01-常用命令.txt 02-表空间建表.txt ...11-存储过程学习笔记.txt 12-触发器学习笔记.txt 13-pl编码.txt

    MSSQL存储过程学习笔记一 关于存储过程

    【MSSQL存储过程学习笔记一 关于存储过程】 存储过程是数据库管理中不可或缺的一部分,尤其是在Microsoft SQL Server(MSSQL)中。本篇笔记主要介绍存储过程的概念、优点、语法以及一些进阶使用技巧。 **一、存储...

    Mysql存储过程学习笔记–建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,提高了性能,还减少了网络流量,增强了安全性。以下是对存储过程的详细说明: **一...

    存储过程学习文档

    ### 存储过程学习文档:深入理解SQL Server存储过程 #### 学习笔记概览 存储过程是SQL Server中一种预编译的SQL代码集合,它以特定的名称存储在数据库中,允许用户通过简单的调用来执行复杂的数据库操作。本文档...

    学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记

    这份学习笔记详细记录了DWS从理论到实践的全过程,对于理解和掌握数据仓库系统有着重要的指导价值,无论是初学者还是经验丰富的专业人士,都能从中受益。通过深入学习和实践,可以更好地利用DWS助力企业的数据驱动...

    Mysql存储过程学习笔记--建立简单的存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,它允许开发者预定义一组SQL语句,以便后续在需要时调用。这不仅简化了代码复用,还能提高执行效率,因为存储过程在首次创建时会被编译,之后的调用只需传入参数即可...

    sql存储过程初学者个人笔记

    ### SQL存储过程初学者知识点详解 #### 一、存储过程简介 存储过程是数据库中一组预编译的SQL...通过以上内容的学习,初学者可以对SQL存储过程有一个较为全面的理解,为日后更深入地学习数据库管理打下坚实的基础。

    oralce学习笔记总结(包含存储过程触发器)

    本文件是本人学习oracle的一些总结资料,值得大家借鉴,可以互相交流

    Oracle 10g 学习笔记

    │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置listener.ora【避免出现ORA-12514错误】.txt │ 贴子树状态存储结构.jpg │ 贴子树状态存储结构.sql │ ├─01...

    sqlserver存储过程

    sqlserver存储过程学习笔记,该文档详述存储过程的使用及和存储过程相关的一些SQLSERVER系统存储过程的用法及功能

Global site tag (gtag.js) - Google Analytics