1

行カウントを行うために Oracle 動的 SQL を作成しようとしています。以下は私のアプローチです。完了するのを手伝ってください。

これは、個々の count ステートメントを生成するために選択したものです。

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 に答える