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%決定的なものではありません。関数/プロシージャで許可されるものには、バージョン間で大きな違いがあります。上記のような例は、LUWの9.7で正常に機能します。

于 2013-03-25T10:06:26.617 に答える