1

我有以下错误

   An unexpected token "table" was found following "elect .."

这是在下面的代码之后产生的。如果我调用该函数,它可以正常工作

   --example
   select * from foo('2013-02-20')

但是当我将它插入存储过程时,它就无法工作了。是否允许调用像我在下面所做的那样的函数?

   create function foo( my_date date ) returns table(data integer) 
   language sql READS SQL DATA  return select id,sum(value) from table where date=my_date group by id; 

   create procedure list_open_positions(my_date date) 
   LANGUAGE SQL begin select * from table(foo(my_date)); end;
4

1 回答 1

2

存储过程不能包含裸 select 语句,因为它们不直接输出查询结果。

表函数应该在作为表达式一部分的 select 语句中正常工作。例如:

create procedure bar(my_date date)
language sql
begin
    insert into some_table
         select * from table(foo(my_date));
end

在不知道您使用的 DB2 的版本和平台的情况下,这个答案不是 100% 确定的。版本之间在功能/过程中允许的内容存在重大差异。上面的示例在 9.7 中适用于 LUW。

于 2013-03-25T10:06:26.617 回答