Obsidian/Recognition/Programing/MariaDB/테이블 일괄 생성.md

113 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2023-08-14 16:19:25 +00:00
```SQL
truncate table tbl_info
insert into tbl_info
select distinct tbl_id, tbl_user, tbl_id, tbl_nm, tbl_desc
from tbl_info dde
order by cast(seq as integer)
-- 테이블 삭제
select distinct concat('Drop table ', tbl_user, '.', tbl_id, ';') as drpotbl
from tbl_info dde
order by cast(seq as integer)
-- 테이블 생성
select tnm, ty, nullyn, def, com
from (
select distinct 0 as sor
, 0 as idx
, tbl_id
, concat('Create table ', tbl_user, '.', tbl_id, ' (') as tnm
, '' ty
, '' nullyn
, '' def
, '' com
from tbl_info dde
union all
select 1 as sor
, seq as idx
, tbl_id
, col_id as col_lend
, concat(col_ty, (case when col_len is null then '' else concat('(', col_len, ')') end )) as ty
, case when defv is not null then concat( ' default '
, case when col_ty = 'VARCHAR'
then concat('''', defv, '''') -- varchar인경우
when col_ty = 'TIMESTAMP' and instr(defv, ' \n') > 0 -- 하드코딩
then concat('to_date(''', replace(defv, ' \n', ''), '''', ', ''yyyy-mm-dd hh24:mi:ss'')')
when col_ty = 'NUMBER'
then replace(defv, ',', '') -- 천단위 콤마제거
else nvl(defv, '')
end
) else null end as def
, case when nullyn = 'O' then ' Not NULL ' else '' end as nullyn
, ',' as com
from tbl_info dde
union all
select distinct 2 as sor
, 9999 as idx
, tbl_id
, ' ); \n\n' as tnm
, '' ty
, '' nullyn
, '' def
, '' com
from tbl_info dde
) c
-- where tbl_id = 'SACP_MOTION'
order by tbl_id, sor, idx
-- pk
SELECT concat('ALTER TABLE ',
tbl_user,
'.',
tbl_id,
' ADD CONSTRAINT PK_',
tbl_id,
' PRIMARY KEY (',
GROUP_CONCAT(col_id SEPARATOR ', '),
');' ) AS tbl_pk
from tbl_info dde
where pkyn = 'O'
-- and tbl_id = 'SACP_MOTION'
group by tbl_id
order by cast(tbl_no as integer)
-- TABLE COMMENT
select distinct concat('COMMENT ON table ',
tbl_user, '.', tbl_id,
' IS ',
'''',
tbl_nm,
nvl2(tbl_desc, ' (', ''),
tbl_desc,
nvl2(tbl_desc, ')', ''),
'''',
';') as col_comment
from tbl_info dde
where tbl_id = 'SACP_MOTION'
order by cast(seq as integer)
-- COLUMN COMMENT
select *
from (
select concat('COMMENT ON COLUMN ',
concat(tbl_user, '.', tbl_id,'.', col_id),
' IS ',
concat('''', concat(col_nm, nvl2(replace(bigo, '''', ''), ' (', ''), replace(nvl(bigo,''), '''', ''), nvl2(bigo, ')', '')), '''')
, ';') as col_comment
from tbl_info dde
order by cast(seq as integer)
) a
where col_comment is not null
```