Oracle TABLE&VIEW DDL 生成スクリプト
データベースから既存のテーブルやビューを作成するためのスクリプトファイルを作成(正しくは、スクリプトの表示)をするスクリプトです。
テーブルや列の名称などの情報をコメントとして登録されていると、その情報を元にコメントを追加します。
ただし、テーブルのプライマリキーやインデックス、ファンクション等は出力されません(単にやり方がわからなかっただけですが…)。
TABLE DDL
1 |
/* ************************************************************************** */
/* * 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 |
/* ************************************************************************** */
/* * 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