ORACLEでテーブル定義を取得する

業務でOracleを触っていて、逐一定義を確認するのが面倒。
データベースクライアントとかも使ってるけどお目当てのテーブルGUIで探すのって結構大変だったりする。
なので、SQLでさくっと書いてみた

/* テーブルの定義を確認 */

SELECT 
    main.column_name,
    main.data_length,
    main.nullable
FROM 
    user_tab_columns main
WHERE 
    table_name = 'TABLE'
ORDER BY
    column_id


/* テーブル制約を確認 */

SELECT
    col.column_name AS カラム名,
    con.constraint_type AS 制約タイプ,
    con.last_change AS 最終更新日,
    con.index_name AS インデックス名
FROM 
    user_constraints con
JOIN
    user_cons_columns col 
    ON
    con.constraint_name = col.constraint_name 
    AND
    con.table_name = col.table_name 
WHERE
    con.table_name = 'TABLE'
    AND
    con.constraint_type = 'P'  
ORDER BY 
   con.table_name


/* テーブルの定義・制約を確認する */

SELECT DISTINCT
    main.column_name AS カラム名,
    main.data_type AS データ型,
    main.data_length AS カラム長,
    main.nullable AS NULL許可,
    sub.constraint_type AS 主キー,
    sub.last_change AS 最終更新日,
    sub.index_name AS インデックス名
    
FROM 
    user_tab_columns main
LEFT JOIN
    
       (SELECT
        col.column_name AS column_name, 
            con.constraint_type AS constraint_type,
            con.last_change AS last_change,
            con.index_name AS index_name,
            con.table_name AS table_name
        FROM 
            user_constraints con
        JOIN
            user_cons_columns col 
            ON
            con.constraint_name = col.constraint_name 
            AND
            con.table_name = col.table_name 
        WHERE
            con.constraint_type = 'P'  
        ORDER BY 
           con.table_name) sub
      
    ON 
    sub.column_name = main.column_name
    AND
    sub.table_name = main.table_name
WHERE 
    main.table_name = :table_name

...基本的に最後のSQL流しておけば問題無いと思う。