如何在FOR循环语句中使用动态SQL?

时间:2013-11-20 10:43:42

标签: sql cursor db2 dynamic-sql sql-pl

是否可以在FOR语句中使用动态SQL?

我正在使用FOR循环来处理SELECT语句中的一批记录。 但是,如果我希望SELECT语句在运行时被框起来,例如表名可以存储在变量中,那该怎么办呢。

for thisRecord as
    select myColumn from MyTable  --can this be dynamic?
do
    .......
end for;

我想要类似下面的内容

declare myCursor cursor for stmt;

set dynamicStmt = 'select myColumn from '||varTable;
prepare stmt from dynamicStmt;

for thisRecord as myCursor
do
    ......
end for;

2 个答案:

答案 0 :(得分:1)

您只需在循环中使用FETCH即可。

答案 1 :(得分:0)

由于没有其他人回答我的问题,我想这意味着在FOR语句中直接使用动态SQL是不可能的。

然而正如其他人所说,我可以使用FETCH。 这是我后来发现的另一个棘手的方法,它适用于我的情况。

使用动态SQL为给定表创建别名,并在FOR语句中使用此别名。 您应该注意的唯一事项是确保别名存在,以便可以编译过程。

Create or replace procedure MyProcedure(tableName varchar(50))
Begin
  EXECUTE IMMEDIATE 'Drop alias myAlias';
  EXECUTE IMMEDIATE 'Create alias myAlias for '||tableName;

  for thisRecord as
   select * from myAlias
  do
     .........
  end for;
End