sybase数据库函数基础示例

本文通过一个示例介绍了如何在Sybase数据库中使用函数查询特定年龄和性别的学生姓名,并将结果用';'拼接。讨论了不同查询结果情况下的处理方式,包括直接赋值、选取第一条数据及使用游标进行循环查询。

表:student(学生表)

有三列,分别为:S_NAME(学生姓名),S_AGE(学生年龄),S_SEX(学生性别);

需求:查出给定年龄和性别的所有学生姓名,并用“;”拼接返回。


函数代码:


CREATE FUNCTION GET_ALL_NAME_BY_PARA(@SEX VARCHAR(32),@AGE int)
RETURNS VARCHAR(1000) AS
BEGIN
    DECLARE @NAME VARCHAR(10)
    DECLARE @OUTP_ARA varchar(1000)    
    DECLARE GET_NAME CURSOR FOR SELECT S_NAME FROM student WHERE S_SEX=@SEX AND  S_AGE=@AGE
    OPEN GET_NAME
    FETCH GET_NAME INTO @NAME
    WHILE @@sqlstatus != 2
        BEGIN
            SET @outPara=@outPara ||  ';' || @NAME
            FETCH GET_NAME INTO @NAME
        END
    CLOSE GET_NAME
    DEALLOCATE GET_NAME
    IF(DATALENGTH(@NAME)>0)
        BEGIN
            SET @OUTP_ARA=SUBSTRING(@NAME,0,DATALENGTH(@NAME)-1)
        END
    RETURN @OUTP_ARA

END


解释:

1:所有的参数和变量都要以@开头;

2:所有的临时变量都要用declare来声明,包括有表;

3:变量的赋值用set和=号来实现;

4:返回结果,需要用return 来返回;

5:GET_ALL_NAME_BY_PARA为创建函数的名字;

6:@SEX和@AGE 分别为函数的两个输入参数;

7:@NAME和@OUTP_ARA为两个临时变量;

8:当从表中查询数据,并将返回值赋值给变量时,可能有几种情况。

A:可以保证一个查询SQL的结果只有一条数据的话。

可以用直接使用SELECT @NAME=S_NAME FROM student WHERE S_SEX=@SEX AND  S_AGE=@AGE来查询并将结果赋值给临时变量。

B:查询结果有多条,但是只需要取其中的随便一条(这个例子中不太合理,实际中会有这样的需求)。

可以用 SELECT @NAME=TOP 1 S_NAME FROM student WHERE S_SEX=@SEX AND  S_AGE=@AGE

C:循环查出所有的数据,这时候就要用到游标来实现循环。代码如示例中的。

显示声明创建游标

DECLARE 游标名称 CURSOR FOR 查询语句           //创建游标
OPEN GET_NAME                                                           //打开游标
    FETCH 游标 名称 INTO @NAME                              //将结果赋值
    WHILE @@sqlstatus != 2                                         //循环操作
        BEGIN
            SET @outPara=@outPara ||  ';' || @NAME
            FETCH GET_NAME INTO @NAME
        END
    CLOSE GET_NAME                                                  //关闭游标
    DEALLOCATE GET_NAME                                     //销毁游标



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值