oracle中for循环的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中for循环的问题相关的知识,希望对你有一定的参考价值。

我要做循环查询出月份不同的表的数据 放到新创建的表中...
比如
create dabing_1001 as
select * from macc.xhy_all_sum_200901

create dabing_1002 as
select * from macc.xhy_all_sum_200902
。。。。。。。。。。。。。。依次类推 以下是思路 请大家帮帮忙

declare
dabing varchar2(100);
dabing2 varchar2(100);
i number;
begin
for i in 1..8 loop
loop
dabing:='macc.xhy_all_sum_20090'||i;
dabing2:='dabing_100'+i;
create table dabing2 as
select * from dabing
end loop;
end;

参考技术A declare
dabing varchar2(100);
dabing2 varchar2(100);
ls_sql Varchar2(4000)
i number;
begin
for i in 1..8 loop
dabing:='macc.xhy_all_sum_20090'||i;
dabing2:='dabing_100'||i;
ls_sql:='Create table '||dabing2||' As select * from '||dabing;
Execute Immediate ls_sql;
end loop;
end;

以上,希望对你有所帮助!本回答被提问者采纳

Oracle / Toad 中的 For 循环

【中文标题】Oracle / Toad 中的 For 循环【英文标题】:For Loop in Oracle / Toad 【发布时间】:2015-09-30 12:51:55 【问题描述】:

我是 Oracle 和 PL/SQL 的新手,我正在尝试做以下事情。

我从存储在变量中的表名中返回列名

variable v_table varchar2(100)
begin
select 'mytable' into :v_table from dual;
end;

select column_name from all_tab_columns where table_name = :v_table

这会返回一个行集

column_name
colname1
colname2
colname3

我想遍历返回的行集并获取每列的一些统计信息。

select count distinct(colname1), min(colname1), max(colname1)
from :v_table
group by min(colname1), max(colname1) 

但是我不知道如何遍历这个行集。

【问题讨论】:

如果您使用 DBMS_Stats 收集有关表的统计信息,则可以直接从数据字典中选择此数据。事实上,它可能已经存在了。 感谢@davidAldridge 的回复。看来我没有执行这些程序的权限。 可能是自动收集统计信息。 【参考方案1】:

通过使用下面,您可以显示表的列名并根据您的要求附加您的 sql 查询...

    declare
         v_table varchar2(100):='TABLE_NAME';
         TYPE NT_VAR1 IS TABLE OF VARCHAR2(30);
         TYP_NT NT_VAR1;
        begin
        select column_name BULK COLLECT INTO TYP_NT from all_tab_columns where table_name =v_table
        order by column_id;
        FOR I IN 1..TYP_NT.COUNT
        LOOP
        DBMS_OUTPUT.PUT_LINE('COLUMN '||I||': '||TYP_NT(I));
        END LOOP;
        end;

注意:您应该动态运行选择查询,这意味着使用执行立即为什么,因为您在运行时传递 table_name。

编辑 在 for 循环中编辑查询后,它将如下所示。

 declare
         v_table varchar2(100):='TABLE_NAME';
         TYPE NT_VAR1 IS TABLE OF VARCHAR2(30);
         TYP_NT NT_VAR1;
         var2 varchar2(2000);
         var3 varchar2(2000);
        begin
        select column_name BULK COLLECT INTO TYP_NT from all_tab_columns where table_name =v_table
        order by column_id;
        FOR I IN 1..TYP_NT.COUNT
        LOOP
        DBMS_OUTPUT.PUT_LINE('COLUMN '||I||': '||TYP_NT(I));
        EXECUTE IMMEDIATE 'SELECT to_char(min('||TYP_NT(I)||')),to_char(max('||TYP_NT(I)||')) from '||v_table into var2,var3;
        dbms_output.put_line(var2||' '||var3);
        END LOOP;
        end;

注意:找出表中存在的列的最大数据长度,并将相同的数据类型分配给 var2 和 var3 变量。

【讨论】:

谢谢@Tarun。请忽略此评论的最后编辑。它运行良好,我在 DBMS 输出窗口中看到了结果。 是的,您可以看到,您使用的是哪个工具? 我认为你在使用 toad 你能看到数据网格窗口吗? 如果您无法在底部看到 DBMS_OUTPUT 选项卡(在您查看查询结果的位置旁边),请右键单击其中一个选项卡并选择 DBMS_OUTPUT。您可以使用该选项卡上显示的按钮打开/关闭输出。 现在我看到了输出,我正在尝试将我的选择逻辑合并到循环中。但是,似乎我的 v_table 变量没有被传递:code select column_name BULK COLLECT INTO TYP_NT from all_tab_columns where table_name =v_table order by column_id; FOR I IN 1..TYP_NT.COUNT LOOP 从 v_table 中选择 MIN(TYP_NT(I)), MAX(TYP_NT(I));结束循环;结尾; code

以上是关于oracle中for循环的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于游标和for循环的问题

oracle for循环

c#通过for循环多次向数据库中插入数据。

在 For 循环两次 Oracle 中访问值

oracle存储过程中循环for in是如何使用的

存储过程中的 Oracle For 循环不循环