存储过程--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

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

BEGIN…END 经常在条件语句(如IF…ELSE)中使用。

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

1.2.1-b

其语法如下:

IF<条件表达式>

<命令行或程序块>

[ELSE[条件表达式]

<命令行或程序块>]

其中:

v<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值“真”或“假”。

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

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

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]

时间: 2025-01-06 14:10:09

存储过程--create procedure的相关文章

MySQL创建存储过程(CREATE PROCEDURE)

MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面我们来介绍一下如何创建一个存储过程. 基本语法 可以使用 CREATE PROCEDURE 语句创建存储过程. 语法格式如下: CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>[过程参数[,…] ] 格式[ IN | OUT | INOUT ]

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_

SQL Server中存储过程Stored Procedure创建及C#调用

存储过程就是已经编译好的.优化过的放在数据库服务器中的一些SQL语句:可供应用程序直接调用.使用存储过程有以下几个优点: 1.执行速度比普通的SQL语句快 2.便于集中控制 3.可以降低网络的通信量 4.保证数据库的安全性和完整性 5.灵活性 创建存储过程 可以采用Transact-SQL语句来创建存储过程Stored Procedured.在Microsoft SQL Server Management Studio中Databases->Database Name->Programmabi

数据库存储过程(Procedure)

存储过程的优点: 提高运行速度.这是因为SQL语句大部分准备工作已经完成大大减少了时间. 增强了SQL的功能和灵活性.存储过程本身有很强的灵活性,能完成复杂的逻辑判断和复制的运算. 可以降低网络的通讯量. 减轻了程序编写的工作量,存储过程可以反复调用,并可供其他前端应用程序共享应用逻辑. 实现安全控制功能. 存储过程的种类: 系统存储过程 用户自定义存储过程 扩展存储过程 存储过程的格式: -- Template generated from Template Explorer using: -

MySQL存储过程(PROCEDURE)(二)

一.存储过程的修改: 语法: 1 ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]  参数解释: Sp_name:表示存储过程或函数的名称 characteristic:表示要修改存储过程的哪个部分 Characteristic取值如下 CONTAINS SQL:表示子程序包含SQL语句,但是,不包含读或写数据的语句 NO SQL:表示子程序中,不包含SQL语句 READS SQL DATA:表示子程序中,包含读数据的语句 MODIF

mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11) begin select count(*) into counts from student where grade = gradename

语法创建示例之——CREATE PROCEDURE

1.背景知识 1) flex: The Fast Lexical Analyzer 2) Bison: A general-purpose parser generator 3) C语言 前二者请自行查阅文档吧,中文资料也很多,OSChina上搜索就可以看到它们的介绍 2.过程 首先,有些语言是区分函数与过程的,有些没有,但它们其实没有本质区别,还是一个东西.对于PG来讲,过程就是RETURNS VOID函数,因此CREATE PROCEDURE其实也就是创建一个同义词.我们来看CREATE F

Hibernate 优化技术之调用视图(View)和存储过程(Procedure)

前言 上一篇blog记录了hibernate抓取策略的相关用法(http://blog.csdn.net/wlwlwlwl015/article/details/42705585),它主要是在对象导航时为我们进行HQL方面的优化.本篇blog将介绍一些通用性的优化方式,即在hibernate中使用视图和存储过程.在数据量比较大时(百万级),使用hibernate时不再推荐使用HQL,而是使用原生的SQL语句,而视图.索引.存储过程等数据库对象也都是基于底层数据库和原生的SQL派生出的优化方案,废

sql: Oracle 11g create procedure

CREATE OR REPLACE PROCEDURE proc_Insert_BookKindList ( temTypeName nvarchar2, temParent int ) AS ncount number; begin --SELECT COUNT (*) INTO ncount FROM BookKindList fm1 where EXISTS (SELECT BookKindName from BookKindList fm2 where fm2.BookKindName=