存储过程--create procedure

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程--create procedure相关的知识,希望对你有一定的参考价值。

1.Transact-SQL语言基本用法:

1 变量

2 流程控制命令

3 其它命令

4 常用函数


1.1变量

局部变量声明和赋值

declare @变量名 变量类型 [,@变量名 变量类型]--变量的声明

selelct @变量=变量值

set @变量=变量值                                               --变量赋值

【例】声明一个长度为8个字符的变量id,并赋值。

  [email protected] char(8)

  [email protected] =10010001

1.2流程控制

1.2.1 流程控制种类

    a.begin.........end

    b.if......else

    c.case

    d.while.......continue....break

    e.waitfor

    f.goto

    g.return

    h.use

1.2.1-a

其语法如下:

  BEGIN

  <命令行或程序块块>

  END

BEGINEND 用来设定一个程序块,将在BEGINEND 内的所有程序视为一个单元执行。

BEGINEND 经常在条件语句(如IFELSE)中使用。

在BEGINEND 中可嵌套另外的BEGINEND 来定义另一程序块。

1.2.1-b

其语法如下:

  IF<条件表达式>

  <命令行或程序块>

  [ELSE[条件表达式]

  <命令行或程序块>]

其中:

v<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值

vELSE 子句是可选的,最简单的IF语句没有ELSE子句部分。

vIFELSE用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。

v如果不使用程序块,IF或ELSE只能执行一条命令。IFELSE 可以进行嵌套,在Transact-SQL中最多可嵌套32级

eg:

从SC数据表中求出学号为S1同学的平均成绩,如果此平均成绩大于或等于60分,则输出pass信息。

if (select avg(score) from sc where sid=‘s1‘ group by sid)>=60

 begin

    print ‘pass‘

 end


1.2.1-c

CASE 命令有两种语句格式:

格式1:

  CASE<运算式>

  WHEN <运算式>THEN <运算式>

 

  WHEN <运算式>THEN <运算式>

  [ELSE <运算式>]

  END

该语句的执行过程是:v将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,

v如果二者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。

vELSE子句是可选项。当CASE语句中不包含ELSE子句时,如果所有比较失败时,CASE语句将返回NULL。

eg:

从学生表S中,选取SNO,SEX,如果SEX为则输出M,如果为输出F

select sno,sex=

    case sex

    when ‘男‘ then ‘M‘

    when ‘女‘ then ‘F‘

    end

from s

格式2:CASE

     WHEN <条件表达式>THEN <运算式>

    

     WHEN <条件表达式>THEN <运算式>

     [ELSE <运算式>]

   END

eg:

从SC表中查询所有同学选课成绩情况,凡成绩为空者输出未考、小于60分输出不及格、60分至70分输出及格、70分至90分输出良好、大于或等于90分时输出优秀”.

select sno,cno,

    score=

    case

    when score is NULL then ‘未考‘

    when score < 60  then ‘不及格‘

    when score >=60 and  score <70 then ‘及格‘

    when score >=70 and  score<90 then ‘良好‘

    when score>=90 then ‘优秀‘

    end

from s

1.2.1-d

其语法如下:

  WHILE<条件表达式>

  BEGIN

    <命令行或程序块>

    [BREAK]

    [CONTINUE]

    [命令行或程序块]

  END

WHILE命令在设定的条件成立时,会重复执行命令行或程序块。

CONTINUE命令可以让程序跳过CONTINUE命令之后的语句,回到WHILE循环的第一行,继续进行下一次循环。

BREAK命令则让程序完全跳出循环,结束WHILE命令的执行。

WHILE语句也可以嵌套。

eg:

以下程序计算1-100之间所有能被3整除的数的个数及总和。

declare @s smallint,@i smallint,@nums smallint

set @s=0

set @i=1

set @nums=0

while(@i<=100)

  begin

    if (@i%3=0)

       begin

        set @[email protected][email protected]

        set @[email protected]+1

       end

    set @[email protected]+1

    end

  end

print @s

print @nums

1.2.1-e

eg:

等待1 小时2 分零3 秒后才执行SELECT语句。

waitfordelay ‘01:02:03’

Select  *  from    employee

1.2.1-f

如:求1+2+3+…+10的总和。

[email protected] SMALLINT,@I SMALLINT

[email protected]=1

[email protected]=0

BEG:

IF(@I<=10)

   BEGIN

       SET @[email protected][email protected]

       SET @[email protected]+1

       GOTO BEG

   END

[email protected]

1.2.1-h

USE {databasename}

USE teach

1.3创建存储过程

1.3.1有参无返

如:在teach数据库中,创建一个名称为InsertRecord的存储过程,该存储过程的功能是向数据表s中插入一条记录,新记录的值由参数提供。

USE teach

CREATE PROCEDURE InsertRecord

(

@sno char(6),

@sn char(20),

@age numeric(5),

@sex char(2),

@dept char(10)

)

AS

INSERT INTO s VALUES(@sno,@sn,@sex,@age,@dept)

1.3.2有参有返

定义能够返回值的存储过程。

如:在teach数据库中,创建一个名称为Query_Study的存储过程,该存储过程的功能是从数据表s中根据学号查询某一同学的姓名和系别。

USE teach

GO

CREATE PROCEDURE Query_Study

(

@sno char(6),

@sn char(20) OUTPUT,--返回值参数定义

@dept char(10) OUTPUT

)

AS

[email protected]=sn,@dept=dept

FROM s

WHERE [email protected]

GO

DECLARE @sn char(20)

DECLARE @dept char(10)

EXECUTE Query_Study ‘S10‘,@sn OUTPUT,@dept OUTPUT

SELECT‘姓名‘[email protected],‘系别‘[email protected]

1.3.3-调用

1.无参调用

EXECUTE myproc

2.执行teach库中存储过程InsertRecord (带参调用) 。

EXECUTE InsertRecord @sno =‘S1’, @sn = ‘王大利’,@sex = ‘男’,@age = 18,@dept= ‘计算机系’

3.执行teach库中的存储过程InsertRecordDefa(含默认值调用)。

EXECUTE InsertRecordDefa @sno =‘S10‘,@sn = ‘高平‘,@sex = ‘女‘,@age = 18

4.执行teach库中的存储过程Query_Study (含有输出参数)。

DECLARE @sn char(20)

DECLARE @dept char(10)

EXECUTE Query_Study ‘S10‘,@sn OUTPUT,@dept OUTPUT

SELECT‘姓名‘[email protected],‘系别‘[email protected]

本文出自 “8756526” 博客,谢绝转载!

以上是关于存储过程--create procedure的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程CREATE PROCEDURE 存储过程名(参数列表)

存储过程--create procedure

Oracle存储过程语法

Procedure 存储过程

mysql store procedure 存储过程

机房重构——存储过程(Stored Procedure)