LoginSignup
0
1

More than 5 years have passed since last update.

Oracle COMMENT ON COLUMN 文取得

Last updated at Posted at 2018-02-13

Oracle12.2 SQL言語リファレンス COMMENT 使用されるOracleのバージョンのマニュアルを確認してからお使いください。

comment_on_column.sql
--
--  COMMENT ON COLUMN 文取得
--
-- history
--    2018/03/08 PKG_USERS_SCHEMA 対応  かなり遅くなったような?
--
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET LINESIZE 500
SET PAGESIZE 50000
SET TERMOUT OFF
SET TRIMSPOOL ON
-- SPOOL pass includes CONNECT_IDENTIFIER, USER_NAME and SYSDATE
COLUMN USER_NAME    NEW_VALUE USER_NAME
COLUMN SYSTEM_DATE  NEW_VALUE SYSTEM_DATE
SELECT USER || '_' AS USER_NAME
     , TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') AS SYSTEM_DATE
FROM DUAL ;
SPOOL comment_on_column_&&_CONNECT_IDENTIFIER._&&USER_NAME&&SYSTEM_DATE..sql
-- Windows ↑,  UNIX/Linux では ↓ を有効に
-- SPOOL comment_on_column_\&&_CONNECT_IDENTIFIER._\&&USER_NAME\&&SYSTEM_DATE..sql
COLUMN COMMNET_ON_COLUMN  FORMAT A500
SELECT                                                                               -- ↓ 桁数は現場対応
    'COMMENT ON COLUMN ' || RPAD(TC.OWNER || '.' || TC.TABLE_NAME || '.' || TC.COLUMN_NAME, 81)
 || ' IS ''' || TO_SINGLE_BYTE(TRIM(CM.COMMENTS)) || ''' ; ' AS COMMNET_ON_COLUMN
    FROM(
        SELECT
            TA.OWNER
          , TA.TABLE_NAME
        FROM(
            SELECT COLUMN_VALUE AS OWNER FROM TABLE(PKG_USERS_SCHEMA.GET_USERS_SCHEMA)  -- ユーザーが作成したスキーマのみ
            ) MS
        INNER JOIN DBA_TABLES
        ON  TA.OWNER = MS.OWNER
        WHERE
            TA.DROPPED = 'NO'  -- except trash box, since Oracle10.1.0
        AND TA.TABLE_NAME NOT IN
            (
            'CHAINED_ROWS'  -- except Oracle side table
          , 'EXCEPTIONS'
          , 'PLAN_TABLE'
          , 'PLAN_TABLE$'
            )
        ) A
    INNER JOIN DBA_TAB_COLUMNS
    ON  TC.OWNER      = A.OWNER
    AND TC.TABLE_NAME = A.TABLE_NAME
    LEFT OUTER JOIN DBA_COL_COMMENTS CM
    ON  CM.OWNER       = A.OWNER
    AND CM.TABLE_NAME  = A.TABLE_NAME
    and CM.OWNER       = TC.OWNER
    AND CM.TABLE_NAME  = TC.TABLE_NAME
    AND CM.COLUMN_NAME = TC.COLUMN_NAME
--  WHERE
    --  TRIM(CM.COMMENTS) IS NOT NULL  -- とりあえず、すでにCOMMENTがある列は除く
    ORDER BY
        TC.COLUMN_NAME
      , TC.OWNER
      , TC.TABLE_NAME
    --  TC.OWNER       -- 表示順を変更したい時
    --, TC.TABLE_NAME
    --, TC.COLUMN_ID
;
SPOOL OFF
COLUMN COMMNET_ON_COLUMN  CLEAR
SET ECHO ON
SET FEEDBACK ON
SET HEADING ON
SET LINESIZE 80
SET TERMOUT ON

参考
Oracle 純粋にユーザー側のスキーマのみを取得

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1