免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1903 | 回复: 8
打印 上一主题 下一主题

想创建一个函数,从一个表中返回符合某一条件的值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-16 11:29 |只看该作者 |倒序浏览
想创建一个函数,从一个表中返回符合某一条件的值

create function rate(aaa  char(4))
returns decimal(15,4)
return
select aa
from tbl_rate
where src=aaa

我这么写有什么错?
我怎么把select查出来的数据赋入一个变量中?
我用select aa into n from tbl_rate
用set n = select aa from tbl_rate都不行么?
是不是select aa from tbl_rate出来是一个表,不能赋给一个变量?
一般大家这个怎么处理的?

论坛徽章:
0
2 [报告]
发表于 2005-03-16 13:04 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

前面应该指定'reads sql data'

论坛徽章:
0
3 [报告]
发表于 2005-03-16 13:19 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

我指定了.编译程序时没有错. 但是执行时保错,说没有权限.当然我设置了权限.输入的变量我应该也没有错啊,真怪

论坛徽章:
0
4 [报告]
发表于 2005-03-16 14:36 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

把你的函数体和执行的语句帖出来看看

论坛徽章:
0
5 [报告]
发表于 2005-03-16 16:39 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

create table db2inst1.rate
{
        HB        char(3),
        RT        decimal(15,4)
}


CREATE FUNCTION db2inst1.GetRate(aaa char(3))
RETURNS DECIMAL(15,4)
language sql reads sql data
return
select RT
from db2inst1.rate
where HB=aaa@

调用
values db2inst1.GetRate('GB1')

论坛徽章:
0
6 [报告]
发表于 2005-03-16 17:15 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

把输入参数改为varchar型。

论坛徽章:
0
7 [报告]
发表于 2005-03-16 17:47 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

谢谢,这是什么道理?
还有个问题,当我调用db2inst1.GetRate('GB1') ,而入参GB1在表里面查不到符合条件的值时我要返回0,这怎么处理?

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-18 14:38:40
8 [报告]
发表于 2005-03-17 09:07 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

CREATE       Function  MakeFram
(
@Fram_ST1 VarChar(10),  --帧起始位1
@Fram_ST2 VarChar(10),  --帧起始位2
@Fram_Len1 VarChar(10),  --帧起长度
@Fram_Len2 VarChar(10),  --帧起长度
@Fram_Contrl VarChar(10),  --帧控制位
@Fram_Area  VarChar(10), --行政区代码
@Fram_DT  VarChar(10),  --终端地址
@Fram_Server VarChar(10), --服务器地址
@Fram_Fun  VarChar(10), --功能码
@Fram_Pos  VarChar(10), --帧位置
@Fram_DataArea VarChar(1000), --数据区域   
@Fram_Time VarChar(50),  --时标
@Fram_CS   Varchar(10), --帧效验
@Fram_End  Varchar(10) --帧结束
) Returns  Varchar(2000)  --帧
Begin
  Declare @Tp_Len3 Int
  Declare @Tp_Result Int
  Declare @Tp_Len4 Varchar(1000)
  Declare @Tp_Len5 Varchar(1000)
  Declare @Tp_Str Varchar(1000)
  Declare @Tp_Str1 Varchar(1000)
  Declare @Fram_Str Varchar(2000)

  Set @Tp_Len3=0
  Set @Tp_Len4=''
  Set @Fram_Str=''
  Set @Tp_Str=''
  Set @Tp_Str1=''
  Set @Tp_Result=0
  Set @Fram_Str=''
  Set @Tp_Len5=''
  --得到帧
  Select @Tp_Str=@Fram_Contrl+@Fram_Area+@Fram_DT+@Fram_Server+@Fram_Fun+@Fram_Pos+@Fram_DataArea+@Fram_Time
  --得到帧的长度16进制
  Select @Tp_Len3=Len(@Tp_Str)*2+1

  Select @Tp_Len4=dbo.Convert10To16(@Tp_Len3)

  Select @Tp_Len5=Case When Len(@Tp_Len4)=2 Then @Tp_Len4+'00'
                       When Len(@Tp_Len4)=4 Then SubString(@Tp_Len4,3,4)+SubString(@Tp_Len4,1,2) End
  While @Tp_Str<>;''
  Begin
      Set @Tp_Str1=SubString(@Tp_Str,1,2)
      Set @Tp_Result=@Tp_Result+dbo.Convert16To10(@Tp_Str1)
      Set @Tp_Str=SubString(@Tp_Str,2,len(@Tp_Str))
  End
  --得到校验位
  Select @Fram_CS=dbo.Convert10To16((@Tp_Result%256))

  Select @Fram_Str=@Fram_ST1+@Tp_Len5+@Tp_Len5+@Fram_ST2+@Fram_Contrl+@Fram_Area+@Fram_DT+@Fram_Server+@Fram_Fun+@Fram_Pos+@Fram_DataArea+@Fram_Time+@Fram_CS+@Fram_End
  Return(@Fram_Str)
End

其它语言写的,不知道是否可以得到提示。

论坛徽章:
0
9 [报告]
发表于 2005-03-17 13:20 |只看该作者

想创建一个函数,从一个表中返回符合某一条件的值?

原帖由 "Louis960" 发表:
谢谢,这是什么道理?
还有个问题,当我调用db2inst1.GetRate('GB1') ,而入参GB1在表里面查不到符合条件的值时我要返回0,这怎么处理?


select VALUE(RT ,0) from db2inst1.rate where HB=aaa
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP