컬럼의 순서가 변경되지않느방법이 있을까요? 0 4 2,558

by CVS [SQL Query] oracle table column [2021.07.07 09:56:41]


a테이블을 a_OLD로 테이블만 복사후

컬럼을 추가하여

a_cdc로 생성시 a_cdc테이블의 컬럼이 a컬럼과 순서가 완전 뒤바뀝니다

컬럼 순서가 변경되지않는방법이 있을까요?

아래와 같이 스크립트를 만들어서 사용하려고합니다.

 

 

select 
'create','table',rtrim(table_name,'_OLD'),'as','select' 
,'cast(',chr('39')||'seq_no'||chr('39'),'as number(20)) as seq_no,'
,listagg(column_name,','),','
,'cast(',chr('39')||'db_user'||chr('39'),'as varchar(45)) as db_user,'
,'from',
table_name||';'
from
all_tab_columns
where table_name like'%_OLD'
group by table_name;

 

by 마농 [2021.07.07 10:23:06]

구문이 뭔가 많이 이상하네요.
구문 실행이 안될 텐데? 정렬이 이상하다는게 말이 안되는데요?
seq_no 컬럼을 맨 앞에 추가하려고 하는 건가요?


by CVS [2021.07.07 10:41:30]

스크립트가 이상하여 수정했습니다.

seq_no를 맨앞에두고 기존 테이블컬럼을 중간에두며 마지막에 컬럼을 더 추가하려고합니다.


by 마농 [2021.07.07 11:16:55]
SELECT 'CREATE TABLE '
    || REPLACE(table_name, '_OLD', '_CDC')
    || ' AS SELECT'
    || ' CAST(null AS NUMBER(20)) seq_no, '
    || LISTAGG(column_name, ', ') WITHIN GROUP(ORDER BY column_id)
    || ', CAST(null AS VARCHAR2(45)) db_user'
    || ' FROM ' || table_name || ';' sql
  FROM user_tab_columns
 WHERE table_name LIKE '%_OLD'
 GROUP BY table_name
;

 


by CVS [2021.07.07 11:55:38]

답변 감사드립니다.

within group을 추가하였더니 바로 해결되었습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입