循环oracle pl/sql中的表名

Posted

技术标签:

【中文标题】循环oracle pl/sql中的表名【英文标题】:table name in loop oracle pl/sql 【发布时间】:2015-05-07 06:48:48 【问题描述】:
 declare
     v_cnt        NUMBER;
     C SYS_REFCURSOR;
 TMP_TBL_NM VARCHAR2(100);
     stmt VARCHAR2(1000); 
     the_name varchar2 (50);
          cursor c_table is
            (SELECT a.table_name 
            --, a.column_name, a.constraint_name, c.owner,            
           --c.r_owner       , c_pk.table_name r_table_name, c_pk.constraint_name r_pk
      FROM all_cons_columns a
      JOIN all_constraints c ON a.owner = c.owner AND a.constraint_name = c.constraint_name
      JOIN all_constraints c_pk ON c.r_owner = c_pk.owner AND c.r_constraint_name = c_pk.constraint_name
     WHERE c.owner like '%LTR' and c_pk.table_name like '%EnumerationValue%');    
      begin
      stmt := 'SELECT table_name  FROM ' || TMP_TBL_NM || ' ORDER BY 1';
        OPEN C FOR stmt;
        for t in C
          loop
          FETCH C INTO the_name;
          EXIT WHEN C%NOTFOUND;
          --my query for each table goes here
         end loop;
     end;

我想在循环中使用表名来根据我的查询检查记录。 仅通过在循环中获取表名才给我错误。 如何在循环中获取表名,以便我可以根据我的要求从循环中的每个表中获取行。

提前致谢。

【问题讨论】:

TMP_TBL_NM 显然没有在任何地方定义 已编辑.. 仍然出现错误 getting error 不是可接受的标准 Oracle 错误。向我们展示错误。 ORA-06550:第 18 行,第 18 列:PLS-00221:'C' 不是过程或未定义 ORA-06550:第 18 行,第 9 列: TMP_TBL_NM 显然没有在任何地方被赋值 【参考方案1】:

我不完全确定你想在这里实现什么,但如果只是你感兴趣的表名,你可以通过这种方式让你的代码不那么复杂:

declare
     cursor c_table is
            SELECT a.table_name 
            --, a.column_name, a.constraint_name, c.owner,            
           --c.r_owner       , c_pk.table_name r_table_name, c_pk.constraint_name r_pk
      FROM all_cons_columns a
      JOIN all_constraints c ON a.owner = c.owner AND a.constraint_name = c.constraint_name
      JOIN all_constraints c_pk ON c.r_owner = c_pk.owner AND c.r_constraint_name = c_pk.constraint_name
begin
    for t in c_table loop
        --do something with the table name
        dbms_output.put_line(t.table_name);
    end loop;
end;

这种 for 循环还处理光标的打开和关闭,是执行此类操作的推荐方式。

【讨论】:

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

oracle 11g 中 for 循环中的 PL/SQL 限制

ORACLE PL/SQL 中的表值函数

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?

从 Oracle PL/SQL 中的表生成 json 文件

如何使用间隔 1 分钟在两个日期之间将时间序列数据生成到 Oracle PL/SQL 中的表中?

oracle--循环PL/SQL--demo1---