トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Source/Sql/OraDDLMake

INDEX

Oracle TABLE&VIEW DDL 生成スクリプト

データベースから既存のテーブルやビューを作成するためのスクリプトファイルを作成(正しくは、スクリプトの表示)をするスクリプトです。

テーブルや列の名称などの情報をコメントとして登録されていると、その情報を元にコメントを追加します。

ただし、テーブルのプライマリキーやインデックス、ファンクション等は出力されません(単にやり方がわからなかっただけですが…)。

TABLE DDL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/* ************************************************************************** */
/* *  Oracle 既存環境のTABLE生成スクリプト作成(表示) for SqlPlus            * */
/* ************************************************************************** */
REM SqlPlus環境設定
SET FEEDBACK OFF
SET HEADING OFF
SET VERIFY OFF
SET LINESIZE 100
SET PAGESIZE 0
SET NEWPAGE 0
--------------------
REM テーブル名設定
REM ※引数から取得する場合は、下記のDEFINEに変える。
ACCEPT TableName CHAR PROMPT "出力するテーブル名を指定してください。:"
--DEFINE TableName = &1

REM すべてのテーブルを出力するための引数付のリスト表示
REM SELECT '@MakeTableDDL.sql ' || TABLE_NAME FROM USER_TABLES;
--------------------
PROMPT /* ************************************************************************** */
PROMPT /* *  Make Table DDL Script for Oracle                 By MakeTableDDL.sql  * */
PROMPT /* ************************************************************************** */
SELECT '-- DROP TABLE ' || TABLE_NAME || ';' || CHR(10) ||
       'CREATE TABLE ' || TABLE_NAME || '('
FROM USER_TABLES
WHERE TABLE_NAME = UPPER('&TableName');

SELECT '    ' || 
    RPAD( UTC.COLUMN_NAME, 32, ' ') ||
    RPAD( UTC.DATA_TYPE ||
        CASE UTC.DATA_TYPE
            WHEN 'CHAR'     THEN '(' || UTC.DATA_LENGTH ||')'
            WHEN 'VARCHAR2' THEN '(' || UTC.DATA_LENGTH ||')'
            WHEN 'NUMBER'   THEN
                    CASE WHEN UTC.DATA_PRECISION IS NOT NULL
                        THEN '(' || UTC.DATA_PRECISION || ',' || UTC.DATA_SCALE ||')'
                        END
            WHEN 'DATE'     THEN ''
            END , 16, ' ') ||
    DECODE( UTC.NULLABLE, 'N', 'NOT NULL', '        ') ||
    CASE WHEN UTC.COLUMN_ID <> (
                SELECT COUNT(*) FROM USER_TAB_COLUMNS 
                    WHERE TABLE_NAME = UPPER('&TableName'))
        THEN ',' ELSE ' ' END || ' ' ||
    '/* ' || RPAD( NVL(UCC.COMMENTS, ' ') , 8, ' ') || ' */'
    AS TABLE_COLUMN_NAME
FROM USER_TAB_COLUMNS UTC
,    USER_COL_COMMENTS UCC
WHERE   UTC.TABLE_NAME  = UPPER('&TableName')
AND     UCC.TABLE_NAME  = UTC.TABLE_NAME
AND     UCC.COLUMN_NAME = UTC.COLUMN_NAME
ORDER BY UTC.COLUMN_ID;

PROMPT )
PROMPT ;;

PROMPT;
SELECT 'COMMENT ON TABLE ' || TABLE_NAME || ' IS ''' || COMMENTS || ''';'
FROM USER_TAB_COMMENTS
WHERE TABLE_NAME = UPPER('&TableName')
AND COMMENTS IS NOT NULL;

SELECT 'COMMENT ON COLUMN ' || TABLE_NAME || '.' || COLUMN_NAME || ' IS ''' || COMMENTS || ''';'
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = UPPER('&TableName')
AND COMMENTS IS NOT NULL;

PROMPT /* ************************************************************************** */
PROMPT /* *  End Of File                                                           * */
PROMPT /* ************************************************************************** */

--------------------
UNDEFINE TableName
REM SqlPlus環境設定戻し
SET LONGCHUNKSIZE 80
SET NEWPAGE 1
SET PAGESIZE 14
SET LINESIZE 80
SET VERIFY ON
SET HEADING ON
SET FEEDBACK ON
/* ************************************************************************** */
/* *  End Of File (MakeTableDDL.sql)                                        * */
/* ************************************************************************** */

VIEW DDL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/* ************************************************************************** */
/* *  Oracle 既存環境のVIEW生成スクリプト作成(表示) for SqlPlus             * */
/* ************************************************************************** */
REM SqlPlus環境設定
SET FEEDBACK OFF
SET HEADING OFF
SET VERIFY OFF
SET LINESIZE 100
SET PAGESIZE 0
SET NEWPAGE 0
SET LONG 20480
SET LONGCHUNKSIZE 256
--------------------
REM ビュー名設定
REM ※引数から取得する場合は、下記のDEFINEに変える。
ACCEPT ViewName CHAR PROMPT "出力するビュー名を指定してください。:"
--DEFINE ViewName = &1

REM すべてのビューを出力するための引数付のリスト表示
REM SELECT '@MakeViewDDL.sql ' || VIEW_NAME FROM USER_VIEWS;
--------------------
PROMPT /* ************************************************************************** */
PROMPT /* *  Make View DDL Script for Oracle                  By MakeViewDDL.sql   * */
PROMPT /* ************************************************************************** */

PROMPT;
SELECT '/* ' || TABLE_NAME || ' : ' || COMMENTS || ' */'
FROM USER_TAB_COMMENTS
WHERE TABLE_NAME = UPPER('&ViewName')
AND COMMENTS IS NOT NULL;

SELECT 'CREATE OR REPLACE VIEW ' || VIEW_NAME || ' ('
FROM USER_VIEWS
WHERE VIEW_NAME = UPPER('&ViewName');

REM ビューの列名(別名)の列挙
SELECT '    ' || RPAD( UTC.COLUMN_NAME ||
    CASE WHEN UTC.COLUMN_ID <> (SELECT COUNT(*) FROM USER_TAB_COLUMNS 
            WHERE TABLE_NAME = UPPER('&ViewName')) THEN ',' END, 32, ' ') ||
    '/* ' ||
    RPAD( UTC.DATA_TYPE ||
        CASE UTC.DATA_TYPE
            WHEN 'CHAR'     THEN '(' || UTC.DATA_LENGTH ||')'
            WHEN 'VARCHAR2' THEN '(' || UTC.DATA_LENGTH ||')'
            WHEN 'NUMBER'   THEN
                    CASE WHEN UTC.DATA_PRECISION IS NOT NULL
                        THEN '(' || UTC.DATA_PRECISION || ',' || UTC.DATA_SCALE ||')'
                        END
            WHEN 'DATE'     THEN ''
            END , 16, ' ') ||
    RPAD( NVL(UCC.COMMENTS, ' ') , 8, ' ') || ' */'
    AS VIEW_COLUMN_NAME
FROM USER_TAB_COLUMNS UTC
,    USER_COL_COMMENTS UCC
WHERE   UTC.TABLE_NAME = UPPER('&ViewName')
AND     UCC.TABLE_NAME  = UTC.TABLE_NAME
AND     UCC.COLUMN_NAME = UTC.COLUMN_NAME
ORDER BY UTC.COLUMN_ID;

SELECT ') AS' FROM DUAL;

REM ビューの問い合せ文
SELECT TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = UPPER('&ViewName');

SELECT ';' FROM DUAL;

PROMPT;
SELECT 'COMMENT ON TABLE ' || TABLE_NAME || ' IS ''' || COMMENTS || ''';'
FROM USER_TAB_COMMENTS
WHERE TABLE_NAME = UPPER('&ViewName')
AND COMMENTS IS NOT NULL;

SELECT 'COMMENT ON COLUMN ' || TABLE_NAME || '.' || COLUMN_NAME || ' IS ''' || COMMENTS || ''';'
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = UPPER('&ViewName')
AND COMMENTS IS NOT NULL;

PROMPT;
PROMPT /* ************************************************************************** */
PROMPT /* *  End Of File                                                           * */
PROMPT /* ************************************************************************** */

--------------------
UNDEFINE ViewName
REM SqlPlus環境設定戻し
SET LONGCHUNKSIZE 80
SET NEWPAGE 1
SET PAGESIZE 14
SET LINESIZE 80
SET VERIFY ON
SET HEADING ON
SET FEEDBACK ON
SET LONG 80
SET LONGCHUNKSIZE 80
/* ************************************************************************** */
/* *  End Of File (MakeViewDDL.sql)                                         * */
/* ************************************************************************** */

最終更新時間:2008年11月18日 00時02分00秒 指摘や意見などあればSandBoxのBBSへ。

MakeTableDDL.sql MakeViewDDL.sql