互联网服务数据库

大家好,新手问一个简单的问题,请大家帮忙,谢谢

我写了一个函数,如下:
CREATE  FUNCTION GETDBDATE (p_dat varchar(10), p_pd int)
  returns varchar(10)
begin atomic
declare  mm varchar(2);
declare  yy varchar(4);
declare  dd varchar(2);
declare  dt varchar(8);
--日期
  select substr(p_dat, 9, 2)   into dd from sysibm.sysdummy1;
  --月份
  select substr(p_dat, 5, 2)   into mm from sysibm.sysdummy1;
  --年份
  select substr(p_dat, 1, 4)   into yy from sysibm.sysdummy1;
return '222';
end;
为什么会报错:
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N  在 "(p_dat, 9, 2)   into" 后面找到异常标记
"dd"。预期标记可能包括:""。  LINE NUMBER=10.  SQLSTATE=42601
SQL0104N  在 "(p_dat, 9, 2)   into" 后面找到异常标记 "dd"。预期标记可能包括:"                                       "。
解释:
在文本 "<文本>" 后面的指定标记处检测到 SQL
语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串中的语法错误。 "<文本>"
字段指示无效标记前面的 SQL 语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串的 20 个字符。
作为帮助,在 SQLCA 的 SQLERRM
字段中,提供了有效标记的部分列表作为
"<标记列表>"。此列表假设语句到该位置为止
是正确的。
无法处理该语句。
用户响应:
在指定的标记区域内检查并更正语句。
sqlcode :  -104
sqlstate :  42601
请高手帮忙指点一下,谢谢了
参与8

8同行回答

yx0409yx0409数据仓库工程师中油瑞飞
竟然是这个原因?学习了!显示全部
竟然是这个原因?学习了!收起
互联网服务 · 2010-03-11
浏览894
wxyzwxyz403wxyzwxyz403软件开发工程师yt
原因是静态游标select into 的select的字段必须来自from的表内,而不是变量,这里的变量dd不是来自sysdummy1的字段,所以报错,只能用set来赋值.显示全部
原因是静态游标select into 的select的字段必须来自from的表内,而不是变量,这里的变量dd不是来自sysdummy1的字段,所以报错,只能用set来赋值.收起
互联网服务 · 2010-03-11
浏览856
hchaohchao网站运营经理TWT
什么原因,一起来分享一下!显示全部
什么原因,一起来分享一下!收起
互联网服务 · 2010-03-11
浏览847
wxyzwxyz403wxyzwxyz403软件开发工程师yt
多谢ls的各位,我已经找到原因了,呵呵,感谢大家~~显示全部
多谢ls的各位,我已经找到原因了,呵呵,感谢大家~~收起
互联网服务 · 2010-03-11
浏览848
写到一个脚本里来执行吧显示全部
写到一个脚本里来执行吧收起
2010-03-11
浏览827
wxyzwxyz403wxyzwxyz403软件开发工程师yt
原帖由 richardmark 于 2010-3-11 11:43 发表 又是在CLP下执行的吧  用工具  或者去掉回车符转载请注明源自www.DB2China.net,请保留版权. 原文地址:http://www.db2china.net/club/thread-7225-1-1.html 已经在结尾改成@了,语句终止字符也改成@了。...显示全部
原帖由 richardmark 于 2010-3-11 11:43 发表


又是在CLP下执行的吧  用工具  或者去掉回车符

转载请注明源自www.DB2China.net,请保留版权.
原文地址:http://www.db2china.net/club/thread-7225-1-1.html
已经在结尾改成@了,语句终止字符也改成@了。收起
互联网服务 · 2010-03-11
浏览870
richardmarkrichardmark系统架构师文思海辉
又是在CLP下执行的吧  用工具  或者去掉回车符转载请注明源自www.DB2China.net,请保留版权. 原文地址:http://www.db2china.net/club/thread-7225-1-1.html显示全部
又是在CLP下执行的吧  用工具  或者去掉回车符

转载请注明源自www.DB2China.net,请保留版权.
原文地址:http://www.db2china.net/club/thread-7225-1-1.html收起
IT咨询服务 · 2010-03-11
浏览876
不明白,你为什么要这样写呢?你想RETURN什么东西?      给你做了些修改,你看看。。。drop function GETDBDATE;CREATE  FUNCTION GETDBDATE (p_dat varchar(10), p_pd int)  returns varchar(10)begin atomicdeclare  mm v...显示全部
不明白,你为什么要这样写呢?你想RETURN什么东西?

      给你做了些修改,你看看。。。

drop function GETDBDATE;
CREATE  FUNCTION GETDBDATE (p_dat varchar(10), p_pd int)
  returns varchar(10)
begin atomic
declare  mm varchar(2);
declare  yy varchar(4);
declare  dd varchar(2);
declare  dt varchar(8);

  set yy = substr(p_dat, 1, 4);
  set mm = substr(p_dat, 6, 2);
  set dd = substr(p_dat, 9, 2);
  
  set dt = yy || mm || dd;
  return dt;
end
;


select db2inst.GETDBDATE('2010-03-11', 1) dt from sysibm.sysdummy1;收起
2010-03-11
浏览833

提问者

wxyzwxyz403
软件开发工程师yt

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2010-03-11
  • 关注会员:0 人
  • 问题浏览:4531
  • 最近回答:2010-03-11
  • X社区推广