私は約5つのスキーマですべてのテーブルのすべての列からデータのサンプルを取得しようとしています。以下は、このデータをちょうど1つのスキーマから取得する例です( "sde"をスキーマの実行に置き換えてください)。この作品は正常に動作:Oracle/SQL各テーブルの各列のデータのサンプル - あまりにも多いですか?
select CASE when
lead(ROWNUM) over(order by ROWNUM) is null then
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1;'
else
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1 union all' end as qry_txt
from all_tab_columns t where T.OWNER='SDE' and T.DATA_TYPE != 'BLOB' and T.DATA_TYPE != 'LONG'
ORDER BY ROWNUM asc, qry_txt asc
結果上記の設定を実行すると、ここでの出力の1行の例です。
select 'HUD_TYPE' as TABLE_NAME,'HUD_TYPE_ID' as COLUMN_NAME, cast(HUD_TYPE_ID as VarChar2(50)) as SAMPLE_DATA from sde.HUD_TYPE where HUD_TYPE_ID is not null and ROWNUM=1 union all
私が直面してる問題は、私が実行したときにということです唯一の5000行で
select CASE when
lead(ROWNUM) over(order by ROWNUM) is null then
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1;'
else
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1 union all' end as qry_txt
from all_tab_columns t where T.OWNER='SDE' and T.DATA_TYPE != 'BLOB' and T.DATA_TYPE != 'LONG'
ORDER BY ROWNUM asc, qry_txt asc
OFFSET 4800 ROWS FETCH NEXT 400 ROWS ONLY; --Using this method so I grab the last few hundred lines so my case statement remains valid for demo
この特定のスキーマは、束の中で最小である:労働組合の完全なセットは、それが終了したことがない、私は使用して一度に数千行の数100を実行することができました復帰する。オンザフライクエリでは不可能な作業をしようとしていますか?または、これをより効率的にする方法や、これをループに分割して何らかの方法でチャンクをつくる方法はありますか?デベロッパーが関与してテーブルやETLなどを作成する必要がないようにしようとしています。私はSQLのエキスパートではありませんが、正しい方向を指していれば、それを解読できます。 :)
ありがとうございます。
あなたが解決しようとしている実際の問題とは何ですか?おそらく、5つのスキーマのすべての表の各列のデータをサンプリングするだけでは、実際の問題に対する唯一の解決策ではありません(そしておそらく最善の解決策ではないかもしれません)。 – mathguy
確かに。私は利用可能なテーブルと列をすばやく検索するためのカスタマー対応のTableauレポートを作成しました。これには、スキーマ、オブジェクトタイプ(テーブル、ビューなど)、テーブル名、列名、データタイプ、およびコメントなどの列が含まれます。私はまた、 "サンプルデータ"を各テーブルの各列からの単一の行のデータである列として含めることを望んでいました。私はそれを行う方法を知っていますが、ユニオンセットは、任意の通常のサイズのデータセットでハングアップするようです...いくつかの最適化ポインタや代替メソッドを同じものを達成するために願っています。 – Drivium