java sybase存储过程_sybase 基本语法,存储过程,触发器

最近2天用了一下sybase,总结一下sybase存储过程和触发器的一些基本特点。

sybase据说在12.xx以后支持自定义function了,但是在Adaptive Server Enterprice版本中似乎不行,

但是函数可以通过存储过程来实现,因为存储过程也是有返回值的:)

存储过程

sybase的存储过程语法基本上与sqlserver相似

变量名需要前面加上@,比如@ABC

每行行末不需要分号(;)

基本函数什么的与sqlserver很接近,但有个烦人的charindex(字符查找函数)不一样,没有

开始查找位置的参数:(,只能自己来实现了。

1.基本结构

CREATE PROCEDURE 存储过程名字

@参数1 VARCHAR(100),  //输入参数

@参数2 INT, //输入参数

@参数3 INT OUTPUT //输出参数

as

declare

@变量1 INT;

@变量2 DATE;

BEGIN

xxxx

END

2.SELECT INTO STATEMENT

这个似乎不支持,那只能用游标来实现了

将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条

记录

例子:

BEGIN

SELECT col1,col2 into @变量1,@变量2 FROM typestruct where xxx;

END;

3.IF 判断

IF @V_TEST=1

BEGIN

do something

END

4.while 循环

WHILE @V_TEST=1

BEGIN

XXXX

END

5.变量赋值

set @V_TEST = 123

select @V_TEST = 123

6.使用cursor

...

as

declare cur_name CURSOR for SELECT * FROM xxx(表名,在触发器中可以是inserted,deleted)

BEGIN

open cur_name

fetch cur_name into xxx,xxx...

begin

set @V_SUM =@xx+@yy

end

END

2.关于sybase触发器

sybase 不支持行级触发器,只能是语句级的,sqlserver也不支持,oracle和mysql是支持的(通过for each row)。

行级比如就是执行insert into xxx select * from xxx类似语句的时候,每插入一行调用一次触发器

语法:

create trigger trigger_name on 绑定的表 for insert|update|delete

as

declare 声明变量

begin

xxx

end

因为不支持行级,可以通过游标来达到相同的目的,就是有点麻烦,比如:

create trigger t1_trigger on t1 for insert

as

declare cur_ins CURSOR for select name from inserted

declare @name varchar(200)

begin

print 'fired ...'

open cur_ins

fetch cur_ins into  @name

while @@sqlstatus=0

begin

print @name

fetch cur_ins into @name

end

close cur_ins

end

如果表t1一条语句插入多行,那么name就被打印多次。

author webjlwang at gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值