Sybase基本知识
SYBASE存储过程一、存储过程简介
二、存储过程的创建、修改、删除
三、存储过程中的参数、返回值和变量
四、存储过程中的流程控制语言
五、存储过程中的事务、游标
六、ASE存储过程和IQ存储过程的常见区别(附例子)
1 存储过程简介
存储过程(Stored Procedure)是为了完成特定的功能而汇集成一组的SQL语句 集,并为该组SQL语句命名、经编译后 存储在SQL Server的数据库中。用户可以 根据需要决定是 否在每次执行时让SQL Server进行重新编译。用户可以指 定存 储过程的名字和给出参数来执行它。 允许多个用户(有权)访问相同的代码。 提供一种集中且一致的实现数据完整性逻辑的方法。 存储过程用于实现:-- 频繁使用的查询 -- 业务规则-- 被其他过程使用的公共例行程序,例如错误处理例行程序等
1.1 存储过程的优点
使用存储过程可加快运行速度 可减少网络交通 可重用、可共享性 存储过程也是一种安全机制 使用存储过程实现数据库完整性 提高数据与应用的独立性
1.2 存储过程的分类
系统存储过程主要 系统提供存储过程 用于从系统表中获取信息、为系统管理员和有权用户提供更新系统表 的途径。系统存储 过程的名字都以"sp_"为前缀。 如:sp_help 。 用户定义的存储过 用户定义存储过程 程是由用户为完成某一特定功能 而编写的存储过程。
1.2.1 系统存储过程
在SQL Server安装时自动建立了一些以sp_为前缀的系统存储过程, 这些系统过程通常用来显示或修改系统表它们可为各用户所供享: 例如
2 存储过程的创建、修改、删除
创建存储过程 执行存储过程 查看、修改、删除存储过程 存储过程中的注释
2.1 创建存储过程
create proc procedure_name as begin SQL_statements [return] end
2.1 创建存储过程
存储过程被放在当前正在使用的数据库中。 在存储过程中可以引用在其他数据库中的对象 创建存储过程(create proc)语句不能与其他的SQL语句在同一个批 中,即创建存储过程语句必须单独成为一个批。 在存储过程中可以包含SQL语句,但是不能包含:use, create view, create rule, create default, create proc, create trigger
2.2 执行存储过程
语法: 语法: [exec[ute]] procedure_name [参数]
2.3 查看、修改和删除存储过程
查看存储过程 查看创建存储过程的源代码,使用:procedure_name sp_helptext
查看存储过程所依赖的表和视图信息,使用:sp_depends procedure_name 查看存储过程的一般信息,如创建日期等,使用:sp_help procedure_name
2.3 查看、修改和删除存储过程
重新命名存储过程 语法:sp_rename old_name , new_name 语法 例:将已创建的存储过程reports_1改名为reports_1b:exec sp_rename reports_1, report_lb
2.3 查看、修改和删除存储过程
删除存储过程 语法:drop proc procedure_name 语法 例: 删除已创建的存储过程reports:drop proc reports
2.4 存储过程中的注释
SQL Server提供了两种在T-SQL中的注释方法: 使用斜杠星号对/* 注示内容* ?a 使用斜杠星号对/* 注示内容*/ 例如: /*bind the rule to all columns with datatype*/ exec sp_bindrule ul_tid,tid
2.4 存储过程中的注释
使用双连字符?°--?±?°-?a 使用双连字符?°--?± 例如:--bind the rule to all columns --with datatype tid exec sp_bindrule ul_tid,tid
3 存储过程中的参数、返回值和变量
存储过程中的参数 存储过程的返回状态 存储过程中的变量
3.1 存储过程中的参数
输入参数(Input Parameters) 是指由调用程序向存储过程 提供的变量值。它们在创建存储过程语句中被定义,而 在执 行该存储过程语句中给出相应的变量值。 使用输入 参数的优 点是使存储过程得更加灵活。
3.1 存储过程中的参数
语法:create proc procedure_name 语法(@parameter_name datatype [, @parameter_name datatype……]) as begin SQL_statements return end
3.1.1 带参数存储过程
举例: 举例: 创建带参数的存储过程create proc proc_author_addr (@lname varchar(40)) as begin select phone, address, city, state from authors where au_lname = @lname return -- 在调用程序的执行存储过程命令中,将相应的值传递给-- 这个输入参数:用'Green'替换@lname exec proc_author_addr @lname = 'Green' 或exec proc_author_addr 'Green?? end
3.1.2 带有返回参数的存储过程
举例: 举例: 创建向调用程序返回值的存储过程:
create proc proc_num_sales (@book_id char(6) = null, /* 输入参数*/ @tot_sales int output /* 输出参数*/ as begin /* 过程将返回对于给定书号的书的总销售量*/ select @tot_sales = sum(qty) from salesdetail where title_id = @book_id return end
3.2 存储过程返回状态
每个存储过程的执行,都将自动返回一个返回状态,用于告知调用程序执行该存 储过程的状况。调用程序可根据返回状态作相应的处理。 语法create proc procedure_name ( ……) as begin SQL_statements return [ integer ] end
3.2 存储过程返回状态
其中:integer为一整数。如果不指定,系统将自动返回一个 整数值。系统使用0表示该过程执行成功;-1至¨C14 表示该 过程执行有错,-15至-99为系统保留值。用户一般使用大于0的整数,或小于-100的负整数。
3.3 存储过程中的变量
局部变量 全局变量
3.3.1.1 局部变量的定义与声明
局部变量是 -用户自定义变量 -使用declare语句定义 -具有名和数据类型 -通过用户赋值 -说明时给变量赋值为空 -局部变量可在存储过程,或触发器中定义
3.3.1.1 局部变量的定义与声明
语法DECLARE @var_name data_type [, @var_name data_type] …… 举例declare @msg varchar(40) declare @myqty int, @myid char(4)
3.3.1.2 为局部变量赋值
局部变量被声明时, 它的初值为NULL , 使用SELECT语句将指定值赋给局部变量。 语法select @var = expression [,@var = expression ] [from…[where…]… 举例declare @var1 int select @var1=99
3.3.1.2 为局部变量赋值
注意 — 在一个赋值给局部变量的select 语句中, 可以使用常数、 从表中取值、或使用表达式给局部变量赋值。 — 不能使用同一SELECT 语句既给局部变量赋值,又检索 数据返回给客户。 — 一个赋值给局部变量的SELECT 语句,不向用户显示任 何值。
3.3.1.3 对局部变量的限制
局部变量必须先用DECLARE定义,再用SELECT语句赋值后才能使用。 局部变量只能使用在T-SQL语句中使用常量的地方。 局部变量不能使用在表名、列名、其它数据库对象名、保留字使用的地方。 局部变量是标量,它们拥有一个确切的值。 赋值给局部变量的SELECT语句应该返回单个值。如果赋值的SELECT语句没有返 回值,则该局部变量的值保持不变;如果赋值的SELECT语句返回多个值,则该局 部变量取最后一个返回的值。
3.3.1.4 使用局部变量时通常发生的错误
在程序中, 使用局部变量通常容易发生的错误是数据类型不 匹配。 即使用DECLARE 语句定义局部变量的数据类型与赋值 给局部变量的值的数据类型不匹配。 如果发生这种情况,SQL Server 总是试图隐式转换为局部变量的数据类型。
3.3.2 全局变量
全局变量( Gloabal Variable )是SQL Server系统提供并赋值的变量。 用户不能建立全局变量,也不能使用SELECT语句去修改全局变量的 值。全局变量的名字用@@开始。大多数全局变量的值报告本次SQL Server启动后发生的系统活动,可以使用系统存储过程sp_monitor显 示全局变量的当前值。通常全局变量的值赋给在同一批中的局部变 量,以便保存和作进一步处理
3.3.2.1 常用的全局变量
&n