こんにちは、代表の亀井です。
ER図の出力を「Cacoo (カクー)」で自動で出力する場合の方法について記載します。
サポートされているわけでもありませんので、実施する場合は自己責任でお願いします。
CacooのER図出力機能
機能利用手順
左側のメニューから「データベーススキーマ」を選択します。
DBMSの選択で、「MySQL」と「PostgreSQL」のどちらかを選択できます。
選択したデータベースの定義出力用のSQLが記載されており、こちらをCSVで出力した後、次のインポート画面でインポートするとER図が生成されます。
とっても簡単ですが、Oracle Databaseがないので、MySQLのインポートをOracle Database用に書き換えて使おうというのが今回の内容です。
MySQL用のSQLをOracle Database用に書き換え
以下のSQLを実行します。
SQL*Plusで直接CSVに変換する設定も書いておきます。
sqlplus <ユーザー名>/<パスワード>
ログイン後以下を実行します。
最後にand ata."OWNER" = '&SCHEMA_NAME.'
の文でテーブルの持ち主を1つのスキーマに絞っています。不要でしたら消して実行してください。
set markup csv on pagesize 10000
SELECT
'mysql' as dbms,
ata."OWNER" as TABLE_SCHEMA,
ata."TABLE_NAME" as TABLE_NAME,
atc."COLUMN_NAME" as COLUMN_NAME,
atc."COLUMN_ID" as ORDINAL_POSITION,
lower(atc."DATA_TYPE") as DATA_TYPE,
decode(
atc."DATA_TYPE"
, 'NUMBER', NULL
, 'DATE', NULL
, atc."DATA_LENGTH"
) as CHARACTER_MAXIMUM_LENGTH,
decode(
ac."CONSTRAINT_TYPE"
, 'C', 'CHECK'
, 'P', 'PRIMARY KEY'
, 'U', 'UNIQUE'
, 'R', 'FOREIGN KEY'
, NULL
) as CONSTRAINT_TYPE,
ac."R_OWNER" as REFERENCED_TABLE_SCHEMA,
ac."REFERENCED_TABLE_NAME" as REFERENCED_TABLE_NAME,
ac."REFERENCED_COLUMN_NAME" as REFERENCED_COLUMN_NAME
from
"ALL_TABLES" ata
, "ALL_TAB_COLUMNS" atc
, (
select ac1."R_OWNER"
, ac1."OWNER"
, ac1."TABLE_NAME"
, ac1."CONSTRAINT_TYPE"
, acc."COLUMN_NAME"
, NULL as "REFERENCED_TABLE_NAME"
, NULL as "REFERENCED_COLUMN_NAME"
from "ALL_CONSTRAINTS" ac1
, "ALL_CONS_COLUMNS" acc
where ac1."OWNER" = acc."OWNER"
and ac1."CONSTRAINT_NAME" = acc."CONSTRAINT_NAME"
and ac1."CONSTRAINT_TYPE" <> 'R'
union all
select ac2."R_OWNER"
, ac2."OWNER"
, ac2."TABLE_NAME"
, ac2."CONSTRAINT_TYPE"
, acc_a."COLUMN_NAME"
, acc_b."TABLE_NAME" as "REFERENCED_TABLE_NAME"
, acc_b."COLUMN_NAME" as "REFERENCED_COLUMN_NAME"
from "ALL_CONSTRAINTS" ac2
, "ALL_CONS_COLUMNS" acc_a
, "ALL_CONS_COLUMNS" acc_b
where ac2."OWNER" = acc_a."OWNER"
and ac2."CONSTRAINT_NAME" = acc_a."CONSTRAINT_NAME"
and ac2."CONSTRAINT_TYPE" = 'R'
and acc_a.POSITION = acc_b.POSITION
and acc_b."OWNER" = ac2.R_OWNER
and acc_b."CONSTRAINT_NAME" = ac2."R_CONSTRAINT_NAME"
) ac
where
ata."OWNER" = atc."OWNER"
and ata."TABLE_NAME" = atc."TABLE_NAME"
and ata."OWNER" = ac."OWNER"(+)
and ata."TABLE_NAME" = ac."TABLE_NAME"(+)
and atc."OWNER" = ac."OWNER"(+)
and atc."COLUMN_NAME" = ac."COLUMN_NAME"(+)
and ata."OWNER" = '&SCHEMA_NAME.'
;
おわりに
Cacooを利用していたが困っていたなど、もし助けになりましたら幸いです。
ヌーラボの方がこの記事を見ていたら、Oracle Databaseも追加しておいていただけると嬉しいですね。
「Cacoo (カクー)」は株式会社ヌーラボの登録商標または商標です