๊ฐœ๋ฐœ์ผ๊ธฐ ๐Ÿ’ป/DB

[Oracle] ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ถ”์ถœํ•ด ๋™์ ์ธ ๊ทธ๋ฆฌ๋“œ ๋งŒ๋“ค๊ธฐ

xoghks_h 2023. 10. 24. 14:32
๋ฐ˜์‘ํ˜•

 ์ขŒ์ธก ๊ทธ๋ฆฌ๋“œ์˜ row๋ฅผ ํด๋ฆญํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์กฐํšŒ๋˜๋Š” ํ™”๋ฉด์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ขŒ์ธก ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ’์— ๋”ฐ๋ผ ์กฐํšŒํ•˜๋Š” ํ…Œ์ด๋ธ”์ด ๊ฐ๊ฐ ๋‹ฌ๋ผ์„œ ์šฐ์ธก ๊ทธ๋ฆฌ๋“œ์˜ ์ปฌ๋Ÿผ์„ ์ •์ ์ธ ๊ฐ’์œผ๋กœ ๊ณ ์ •ํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค. ํ•  ์ˆœ ์žˆ์—ˆ์ง€๋งŒ ์• ๋งคํ•œ ๋‹จ์–ด ์„ ํƒ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•  ๊ฒƒ์ด ๋ถ„๋ช…ํ–ˆ๊ณ , ์ด๋Š” ๊ณง ์ˆ˜์ • ์š”์ฒญ ์‚ฌํ•ญ์œผ๋กœ ์ ‘์ˆ˜๋˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค(๊ฒฝํ—˜์ด๋‹ค).
 ๊ทธ๋ž˜์„œ ์šฐ์ธก ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์กฐํšŒ๋  ๋•Œ๋งˆ๋‹ค ์ปฌ๋Ÿผ์„ ๋™์ ์œผ๋กœ ์„ธํŒ…๋˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค. ์ด ๋•Œ ๋™์ ์œผ๋กœ ์„ธํŒ…๋˜๋Š” ์ปฌ๋Ÿผ ๊ฐ’์„ ์กฐํšŒํ•ด์˜ค๋Š” ์ปฌ๋Ÿผ ๊ฐ’ ๊ทธ๋Œ€๋กœ ๋ฟŒ๋ ค์ฃผ๋‹ˆ ์ „๋ถ€ ์˜์–ด๋กœ ์ถœ๋ ฅ๋˜์–ด, ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ค์›Œ์„œ ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ์ฝ”๋“œ์™€ ๋งคํ•‘๋œ ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ๋ฟŒ๋ ค์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค.

SELECT *
  FROM ALL_COL_COMMENTS
 WHERE TABLE_NAME = 'ํ…Œ์ด๋ธ”๋ช…'
 
 OR
 
 SELECT *
  FROM COLS
 WHERE TABLE_NAME = 'ํ…Œ์ด๋ธ”๋ช…'

์œ„ ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋‚˜์˜ ๊ฒฝ์šฐ์—” COLUMN_NAME์— ์ปฌ๋Ÿผ ์ฝ”๋“œ ๊ฐ’, COMMENTS์— ์ปฌ๋Ÿผ ๋ช…์„ ๋งคํ•‘ํ•ด๋†จ๋‹ค.

์ปฌ๋Ÿผ ์ฝ”๋“œ ๊ฐ’๊ณผ ์ปฌ๋Ÿผ ๋ช…

SELECT '{'||LISTAGG('"'||COLUMN_NAME||'":"'||COMMENTS||'"',',') WITHIN GROUP (ORDER BY COLUMN_NAME)||'}' AS COLUMNS
  FROM ALL_COL_COMMENTS
 WHERE TABLE_NAME = 'ํ…Œ์ด๋ธ”๋ช…'

 LISTAGG ํ•จ์ˆ˜๋Š” row ๋‹จ์œ„๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ตฌ๋ถ„์ž๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ 1row ๋ฆฌ์ŠคํŠธ๋กœ ์ถ”์ถœํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค. ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด COLUMN_NAME๊ณผ COMMENTS๋ฅผ JSON Object ํ˜•์‹์œผ๋กœ ์ถ”์ถœํ–ˆ๋‹ค.

debugger์—์„œ ์ฐ์€ COLUMN_LIST ๊ฐ’

 ์œ„ ์‚ฌ์ง„์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊ณต์„ ์œ„ํ•ด ์ธ์œ„์ ์œผ๋กœ JSON์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค์—ˆ์„ ๋ฟ, type์„ ์ฒดํฌํ•ด๋ณด๋ฉด JSON ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ String์ด๋‹ค. ์ด๋ฅผ JSON ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์ปฌ๋Ÿผ ๋ช…์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์— ํ‚ค๊ฐ’์œผ๋กœ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

// ์ˆ˜์ • ์ „
if ($NC.isNotNull(rowData)) {
  for (let field in rowData) {
    if (field == "id" || field == "CRUD") {
      continue;
    }
    $NC.setGridColumn(columns, {
      id: field,
      field: field,
      name: field, //์ปฌ๋Ÿผ ๋ช…์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„
      minWidth: field.length * 10
    }, false);
  }
}
  
// ์ˆ˜์ • ํ›„
let COLUMN_ARRAY = JSON.parse(rowData.COLUMN_LIST); // String → JSON ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜

if ($NC.isNotNull(rowData)) {
  for (let field in rowData) {
    if (field == "id" || field == "CRUD") {
      continue;
    }
    $NC.setGridColumn(columns, {
      id: field,
      field: field,
      name: COLUMN_ARRAY[field], // JSON ๊ฐ์ฒด์—์„œ key ๊ฐ’์œผ๋กœ value ๊ฐ’ ์ถ”์ถœ
      minWidth: field.length * 10
    }, false);
  }
}

JSON ๊ฐ์ฒด๋กœ ์ž˜ ๋ฐ”๋€ ๋ชจ์Šต์ด๋‹ค. ($NC.toArray() ํ•จ์ˆ˜๋Š” JSON.parse()์™€ ๋™์ผํ•œ ์—ญํ• ์„ํ•˜๋Š” ๊ณตํ†ต ํ•จ์ˆ˜์ด๋‹ค.)

 ์ฒ˜์Œ์—๋Š” COLUMN_ARRAY.field ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋  ์ค„ ์•Œ์•˜๋Š”๋ฐ, for๋ฌธ์„ ๋Œ๋ฉด์„œ field์— String ํ˜•์œผ๋กœ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋‹ค ๋ณด๋‹ˆ ์›ํ•˜๋Š”๋Œ€๋กœ ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š์•˜๋‹ค(COLUMN_ARRAY.'BU_CD' ์ด๋ ‡๊ฒŒ ํ˜ธ์ถœ ๋œ ๋“ฏ).
๊ทธ๋ž˜์„œ ์œ„์˜ ์ˆ˜์ •๋œ ์ฝ”๋“œ ์ฒ˜๋Ÿผ COLUMN_ARRAY[field] ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ๋‹ˆ ๊ฐ’์ด ์ž˜ ๋‚˜์™”๋‹ค.
 

๋ฐ˜์‘ํ˜•