■概要
有識者から見たら、全くショボい予感もするのですが、
一応仕事で役立ったと思われるOracleのテクニック&ツール類を公開する予定です。
■一覧
■Tips!
1. 全てのテーブルに対してカウントを取得する
スキーマにあるテーブル全部に対してカウントを取得したい場合に使えるスクリプトです。
set serveroutput on size 1000000 DECLARE CURSOR c1 IS SELECT table_name FROM user_tables; sql_stmt varchar2(200); table_cnt number(10); BEGIN FOR c1_rec IN c1 LOOP sql_stmt := 'SELECT COUNT(*) FROM ' || c1_rec.table_name; EXECUTE IMMEDIATE sql_stmt INTO table_cnt; DBMS_OUTPUT.PUT_LINE(c1_rec.table_name || ',' || table_cnt); END LOOP; END; / quit |
応用すれば、全部のテーブルをトランケートとかドロップもできますね。
importユーティリティの前処理なんかでも使えるかも知れません。
2. 既に作成されたテーブルのDDLを出力する
既に作成されたテーブルから、CREATE TABLE文とCREATE INDEX文を出力するスクリプトです。
■実行方法
・自スキーマ内の全テーブルを出力する場合
[Download]: makeddl.sql
3. 既に作成されたテーブルのControlファイルを出力する
既に作成されたテーブルから、SQL*Loader用のControlファイルを出力するスクリプトです。
■実行形式
■実行方法
自スキーマ内の全テーブルを出力する場合)
[Download]: makecontrol.sql
4. 既に作成されたテーブルのレイアウト情報を元に、機械的データを作成しテーブルにロードする
既に作成されたテーブルのレイアウト情報を元に、機械的データ(abc..., 012...など)を作成し、テーブルにロードするツール群および手順です。
[Download]: makedata.zip
表領域やインデックスを変えたい時とか、他スキーマに同じテーブルを作る時に使えます。
・特定のテーブルを出力する場合
makeddl.sql [テーブル名]
makeddl.sql ALL
makecontrol.sql [形式] [テーブル名]
形式:
固定長ファイル: FIX
CSVファイル : CSV
特定のテーブルを出力する場合)
makecontrol.sql FIX [テーブル名]
makecontrol.sql CSV ALL
■実行方法(添付のHOWTO.txtと同じ)
**************************************************
機械的データ作成ツール
**************************************************
■1.テーブルを作成する
SQL*Plusなど
■2.設定ファイルを自動生成する(引数にテーブル名(大文字)を指定)
makeconf.bat / makeconf.sql
■3.SQL*Loader用コントロールファイルを自動生成する(2.で生成した設定ファイルを引数に指定)
makectl.bat / makectl.vbs
■4.データを自動生成する(2.で生成した設定ファイルと、自動生成したい件数を指定)
makedata.bat / makedata.vbs
■5.SQL*Loaderで、データをテーブルにロードする
SQL*Loader
■6.結果を確認する。
SQL*Plusなど
**************************************************
■1.テーブルを作成する
SQL> create table test
2 (
3 col1 varchar2(1)
4 , col2 number(1,1)
5 , col3 date
6 , col4 char(1)
7 , primary key (col1)
8 )
9 /
表が作成されました。
SQL> desc test
名前 NULL? 型
----------------------------------------- -------- ----------------------------
COL1 NOT NULL VARCHAR2(1)
COL2 NUMBER(1,1)
COL3 DATE
COL4 CHAR(1)
SQL> select count(*) from test;
COUNT(*)
----------
0
SQL>
■2.設定ファイルを自動生成する(引数にテーブル名(大文字)を指定)
D:\work\temp>makeconf TEST
D:\work\temp>more TEST.txt
COL1 ,CHAR
, 1, ,
1
COL2 ,NUMBER
, 1, 1,
0
COL3 ,DATE
, 7, ,
0
COL4 ,CHAR
, 1, ,
0
■3.SQL*Loader用コントロールファイルを自動生成する(2.で生成した設定ファイルを引数に指定)
D:\work\temp>makectl TEST.txt > TEST.ctl
D:\work\temp>more TEST.ctl
LOAD DATA
INTO TABLE TEST
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
COL1
,COL2
,COL3
,COL4
)
■4.データを自動生成する(2.で生成した設定ファイルと、自動生成したい件数を指定)
D:\work\temp>makedata TEST.txt 10 > TEST.dat
D:\work\temp>more TEST.dat
a,.1,2006/07/29,a
b,.1,2006/07/29,a
c,.1,2006/07/29,a
d,.1,2006/07/29,a
e,.1,2006/07/29,a
f,.1,2006/07/29,a
g,.1,2006/07/29,a
h,.1,2006/07/29,a
i,.1,2006/07/29,a
j,.1,2006/07/29,a
■5.SQL*Loaderで、データをテーブルにロードする
D:\work\temp>sqlldr userid=hoge/moge control=TEST.ctl data=TEST.dat
SQL*Loader: Release 9.0.1.1.1 - Production on 土 Jul 29 20:47:58 2006
(c) Copyright 2001 Oracle Corporation. All rights reserved.
コミット・ポイントに達しました。 - 論理レコード件数10
D:\work\temp>
■6.結果を確認する。
SQL> select count(*) from test;
COUNT(*)
----------
10
SQL> select * from test;
C COL2 COL3 C
- ---------- -------- -
a .1 06-07-29 a
b .1 06-07-29 a
c .1 06-07-29 a
d .1 06-07-29 a
e .1 06-07-29 a
f .1 06-07-29 a
g .1 06-07-29 a
h .1 06-07-29 a
i .1 06-07-29 a
j .1 06-07-29 a
10行が選択されました。
SQL>