是否可以在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;
答案 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