Sql db2不允许在存储过程中使用函数

Sql db2不允许在存储过程中使用函数,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,我有以下错误 An unexpected token "table" was found following "elect .." 这是在下面的代码之后生成的。 如果我调用该函数,它工作正常 --example select * from foo('2013-02-20') 但当我把它插入存储过程时,它就不工作了。 是否允许调用我在下面所做的函数 create function foo( my_date date ) returns table(data intege

我有以下错误

   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;

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

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

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。

HI DAn!谢谢您是说原则上我不能创建一个存储过程来打印该函数的结果吗?我想为那些根本不想处理SQL的用户这样做。我的目标是创建一个存储过程来包装调用并在屏幕上打印结果,而不是运行“db2select*fromtablefoomy_date”。我认为这是一个愚蠢的任务@Abruzzofortegentile,没错,你不能那样做。如果您的用户根本不想处理SQL,您可以创建一个SQL文件,然后他们可以运行该文件并查看结果。或者,如果需要更多的工作,您可以用几乎任何编程语言创建一个小脚本来运行查询并显示结果。非常感谢。我发现所有的人都在抱怨这件事。我会照你的建议去做。