互联网服务数据库

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

我写了一个函数,如下: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  d...显示全部
我写了一个函数,如下:
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

查看其它 7 个回答wxyzwxyz403的回答

wxyzwxyz403wxyzwxyz403软件开发工程师yt
原因是静态游标select into 的select的字段必须来自from的表内,而不是变量,这里的变量dd不是来自sysdummy1的字段,所以报错,只能用set来赋值.
互联网服务 · 2010-03-11
浏览857

回答者

wxyzwxyz403
软件开发工程师yt

wxyzwxyz403 最近回答过的问题

回答状态

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