要望別対処法
テーブル情報が欲しい
実データからINSERT文を生成したい
実データをCSV出力したい
テストデータを大量に作成+登録したい
rownum関数でFROMに指定したテーブルの連番を生成することができる。番号は1から。
このテーブルにはそれなりの件数をもつシステムテーブルのALL_CATALOGがよく使われている。
ALL_CATALOGのWHERE句にrownumを設定することで件数の指定が可能。
SELECT rownum --1から100までの連番を生成(100件出力)
FROM (SELECT 0 FROM ALL_CATALOG WHERE rownum <= 100);
ALL_CATALOGの件数にも限界があるので
100万件などの巨大データが欲しい場合はALL_CATALOGテーブルをクロス結合する。
SELECT rownum --1から1000000までの連番を生成(100万件出力)
FROM
(SELECT 0 FROM ALL_CATALOG WHERE rownum <= 1000),
(SELECT 0 FROM ALL_CATALOG WHERE rownum <= 1000);
また、DBMS_RANDOM.STRING関数で英数字のランダムな文字列を生成することができる。桁数指定も可能。
SELECT DBMS_RANDOM.STRING('X', 4); --4文字のランダムな英数字を表示
DBMS_RANDOM.VALUE関数を使うと乱数を生成できる。
SELECT ROUND(DBMS_RANDOM.VALUE(0,99)); --0から99までの乱数を表示
INSERT INTO SELECT文に上記関数を組み合わせて使うことで簡単にデータを生成+登録することができる。
TRUNCATE TABLE tablename;
INSERT /*+ APPEND */ INTO tablename NOLOGGING
SELECT
lpad(rownum, 8, '0'),
rownum,
DBMS_RANDOM.STRING('X', 4),
ROUND(DBMS_RANDOM.VALUE(0,99)),
SYSDATE,
'TEST_DATA',
TO_DATE('2016/01/01 00:00:00','yyyy/mm/dd hh24:mi:ss')
FROM
(SELECT 0 FROM ALL_CATALOG WHERE ROWNUM <= 10),
(SELECT 0 FROM ALL_CATALOG WHERE ROWNUM <= 10);
最終更新:2015年10月30日 23:06