您的位置:程序门 -> db2 -> 数据库开发



大虾们,救命啊,自定义函数取序列问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


大虾们,救命啊,自定义函数取序列问题
发表于:2007-05-30 16:01:26 楼主
我在db2中创建以下函数,我的想法是前台传一个序列的名称,这个函数根椐传入的序列名称去取相应的序列值:

create   function   getseq(v_data   varchar(100))
returns   integer
language   sql
begin   atomic
    declare   v_return   integer   default   0;
   
    set   v_return   =   nextval   for   v_data;
   
    return   v_return;
end  

报如下错:
c:\program   files\ibm\sqllib\bin> db2   -td@   -vf   d:\db2\getseq.sql
create   function   getseq(v_data   varchar(100))
returns   integer
language   sql
begin   atomic
    declare   v_return   integer   default   0;

    set   v_return   =   nextval   for   ¦ ¦v_data;

    return   v_return;
end

db21034e     该命令被当作   sql
语句来处理,因为它不是有效的“命令行处理器”命令。在   sql   处理期间,它返回:
sql0204n     "db2admin.v_data "   是未定义的名称。     line   number=7.     sqlstate=42704

如果这样写不能实现,有什么其他方法实现没?不胜感激!
发表于:2007-05-31 12:10:051楼 得分:0
用动态sql了
发表于:2007-06-26 16:04:542楼 得分:0
学习!~顶一下!~
发表于:2007-06-30 00:57:593楼 得分:0
在function中传入序列名称得到序列号,弄了一些时间没有结果,好像function中根本不支持动态sql。请高手们指教。


下面是在procedure中实现的情况,
drop   procedure   getseq;
create   procedure   getseq(v_data   varchar(100))

language   sql
begin  
    declare   v_return   integer;
    declare   v_tmp     varchar(100);
declare   cur_result   cursor   with   return   to   caller   for   sqlstatment;

set   v_tmp   =   'values   nextval   for   ' ¦ ¦v_data;
prepare   sqlstatment   from   v_tmp;
    open   cur_result;
    fetch   cur_result   into   v_return;
    close   cur_result;
end;
发表于:2007-07-02 15:25:474楼 得分:0
该回复于2007-12-29 16:24:29被管理员或版主删除


快速检索

最新资讯
热门点击