如何在for循环中使用动态sql语句? 我有一个来自外部循环的变量i.owner,它表示Schema。
mydata %>%
group_by(Index) %>%
summarise(Mean_2014 = mean(Y2014))
## # A tibble: 3 x 2
## Index Mean_2014
## <fctr> <dbl>
## 1 A 1.00
## 2 C 1.00
## 3 I 1.00
游标会导致类似的问题。
答案 0 :(得分:3)
您不能在cursor-for循环中使用动态SQL。您必须批量查询集合,或者可能更有用地使用open for, fetch and close pattern,例如:
declare
c sys_refcursor;
begin
for i in (<however you get the owner/table_name now>)
loop
open c for 'select * from ' || i.owner || '.' || i.table_name;
loop
begin
fetch c into ...;
exit when c%notfound;
exception when others then DBMS_OUTPUT.PUT_LINE('error');
end;
end loop; -- j
close c;
end loop; -- i
end;
/
问题在于...
部分 - 即您要获取的内容。如果表结构,或者至少是您要查询的列,每次循环i
循环都是相同的,那么您可以定义单个标量变量以获取每个列,或者基于{{定义记录变量其中一个表的一个表(如果它们都是相同的,你总是有一个你知道存在的,并且你正在使用%rowtype
),或者定义一个记录的字段可以解释你正在获取的内容。
如果结构可能有所不同,那么您必须查看select *
包。
如果表名始终相同,并且不是来自dbms_sql
循环,则可以略微简化为:
i