1

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

2 回答 2

1

您可以简单地FETCH在循环中使用。

于 2013-11-20T12:06:17.630 回答
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
于 2013-11-27T02:49:36.613 回答