1

我正在尝试编写 Oracle 动态 SQL 来进行行计数,以下是我的方法,请帮助我完成。

这是我生成单个计数语句的选择:

select 'select count(*) from '||table_name||';'
from dba_tables
where owner = 'URR';

我是这样开始的:

declare
  l_owner varchar2(30) := 'URR';
  l_table_name varchar2(30);
  l_columns varchar2(32000);
  l_sql varchar2(32000);
begin
4

1 回答 1

3

这是一个简单的示例,它查看您自己架构中的表:

set serveroutput on
declare
    c number;
begin
    for r in (select table_name from user_tables) loop
        execute immediate 'select count(*) from ' || r.table_name
            into c;
        dbms_output.put_line(r.table_name ||': '|| c);
    end loop;
end;
/

要查看其他人的表,您需要在dba_tables开始尝试时使用,或者更有可能all_tables排除您无法计数的表,但您还需要在count语句中指定所有者。

通常,您希望使用绑定变量来避免 SQL 注入,但您必须像这样使用连接指定对象名称。

其他需要注意的是您在查询中遇到的错误,但 Egor 现在已将其从问题中删除。您执行的动态 SQL 字符串不应以分号 ( ;) 结尾。

于 2013-05-01T15:15:20.673 回答