3

select ステートメントを実行する単純なストアド プロシージャを作成しようとしていますが、構文エラーが表示され続け、エラーの内容を教えてくれるヘルプがありません。

create procedure _this_is_it(this CHAR(3), that CHAR(4), other CHAR(3))
foreach select * from table 
where column1 = this and
column2 = that and
column3 = other
end foreach
end procedure;

構文エラーが発生する理由はありますか?

4

2 に答える 2

3

foreach ループ内で何らかの処理を実行する場合は、SELECT INTO変数を使用する必要があります。したがって、コードは次のようになります。

drop procedure if exists _this_is_it ;
drop table if exists this_table ;
create temp table this_table(column1 CHAR(3), column2 CHAR(4), column3 CHAR(3))
with no log ;
insert into this_table values("A","B","C") ;

create procedure _this_is_it(this CHAR(3), that CHAR(4), other CHAR(3))
returns CHAR(10) AS something

define f_this CHAR(3) ;
define f_that CHAR(4) ;
define f_other CHAR(3) ;

foreach
select * into f_this, f_that, f_other
from this_table
where column1 = this and
column2 = that and
column3 = other

return f_this||f_that||f_other WITH RESUME ;

end foreach
end procedure;

grant execute on _this_is_it to public;
execute procedure _this_is_it("A","B","C") ;

drop procedure if exists _this_is_it ;
drop table if exists this_table ;

FOREACH ステートメントの構文は、IBM のInfocenterから入手できます。

于 2012-10-26T11:41:47.587 に答える
3

最初の文字としてのforeachと を削除し、選択の最後に a も追加します。_;

create procedure this_is_it(this CHAR(3), that CHAR(4), other CHAR(3))

select * from table 
where column1 = this and
column2 = that and
column3 = other;

end procedure;
于 2012-06-01T14:09:54.520 に答える