1

出力を 2 つの列を持つ単一のテーブル (出力と呼びましょう) にしたいという問題があります。指図)。

100 個のテーブルがあり、これらすべてのテーブルの最終更新日時を出力テーブルに取り込みたいと考えています。

だから私はこれを行うことができます:

insert into Output(TableName) 
select table_name
from all_tables;

これにより、データベースから持っているすべてのテーブルが TableName 列に入れられます。しかし、各エントリをループしてテーブル名を変数として使用し、これを scn_to_timestamp(ora_rowscn) に渡す方法がわかりません。

以下のようなものを試してみようと思いました:

for counter in Output(TableName) LOOP
insert into Output(UpdateDate)
select scn_to_timestamp(max(ora_rowscn)) 
from counter;
END LOOP;

助言がありますか?

ありがとうございました

4

1 に答える 1

0

このクエリは、クエリで動的 SQL を実行するために使用するため、少し扱いにxmlgen​​くいですが、うまくいく可能性があります。

select x.*  
  from all_tables t,       
       xmltable('/ROWSET/ROW' passing
            dbms_xmlgen.getxmltype('select ''' || t.table_name ||
                                   ''' tab_name, max(ora_rowscn) as la from ' ||
                                   t.table_name) 
                 COLUMNS tab_name  varchar2(30) PATH 'TAB_NAME',
                         max_scn number PATH 'LA') x

ここにsqlfiddleのデモがあります

PLSQLを使用してから使用することもできますexecute immediate

于 2013-11-06T11:45:10.820 に答える