WITH tempTbl AS (
SELECT a.COLUMN_ID AS colId
, a.COLUMN_NAME AS colName
, LOWER(SUBSTR(REPLACE(INITCAP(a.COLUMN_NAME),'_'),1,1))||SUBSTR(REPLACE(INITCAP(a.COLUMN_NAME),'_'),2,LENGTH(a.COLUMN_NAME)-1) AS camel
, ('/*'||c.COMMENTS || ','|| a.DATA_TYPE ||'('||a.DATA_LENGTH ||')'||'*/') AS cmt
, ('/*'||c.COMMENTS ||'*/') AS cmt2
, c.COMMENTS AS orgCmt
, a.DATA_TYPE AS dataType
, a.DATA_LENGTH AS dataLen
FROM ALL_TAB_COLUMNS a
LEFT OUTER JOIN ALL_COL_COMMENTS c
ON a.OWNER = c.OWNER
AND a.TABLE_NAME = c.TABLE_NAME
AND a.COLUMN_NAME = c.COLUMN_NAME
WHERE a.OWNER = 'SEMA_ERP'
AND a.TABLE_NAME IN ('AM_CMMN_COSTPT_D') /*조회할 Table명*/
-- AND a.COLUMN_NAME IN ('COMPANY_CODE','BANK_NO_SEQ','BANK_NO','BANK_DIV','CUST_CODE','DEPOSIT_OWNER','USE_YN','DEPT_CODE','APL_STR_DTE'
-- ,'APL_END_DTE','FUND_CHK_YN','FUND_CHK_NOTE','FUND_CHK_YN_B','BANK_RES_CODE','BANK_RES_DESC','INPUT_DATE','INPUT_DUTY_ID'
-- ,'CHG_DATE','CHG_DUTY_ID'
-- )
)
SELECT MAX(aa.ommType) AS ommType
, MAX(aa.colId) AS colId
, aa.ommName
, MAX(aa.ommDescription) AS ommDescription
, MAX(aa.ommLength) AS ommLength
, (MAX(aa.ommType)||' '||aa.ommName||'<length='||MAX(aa.ommLength)||' description="'||MAX(aa.ommDescription)||'">;') AS ommGenStr
, MAX(aa.dmlStr) AS dmlStr
, MAX(aa.dmlStr2) AS dmlStr2
FROM (
SELECT CASE WHEN a.dataType IN ('VARCHAR2') THEN 'String'
WHEN a.dataType IN ('DATE') THEN 'Date'
WHEN a.dataType IN ('NUMBER') AND a.dataLen < 10 THEN 'Integer'
WHEN a.dataType IN ('NUMBER') AND a.dataLen >= 10 THEN 'BigDecimal'
END ommType
, a.camel AS ommName
, a.orgCmt AS ommDescription
, a.dataLen AS ommLength
, a.colId
, (', '||RPAD(a.colName, b.maxLenCol, ' ') ||' AS '||RPAD(a.camel, b.maxLenCmt,' ')||' '||a.cmt) AS dmlStr
, (', '||RPAD(a.colName, b.maxLenCol, ' ') ||' '||a.cmt2) AS dmlStr2
FROM tempTbl a
OUTER APPLY( SELECT MAX(LENGTHB(colName)) AS maxLenCol
, MAX(LENGTHB(camel)) AS maxLenCmt
FROM tempTbl
) b
) aa
GROUP BY aa.ommName
-- ORDER BY aa.ommName
ORDER BY MAX(aa.colId)
-- ORDER BY MAX(aa.ommName)