특정 테이블에서 자료 삭제시 삭제된 자료를
동일한 구조의 다른 테이블로 INSERT하고자 합니다.
문제는 필드의 갯수가 너무 많아서 일일히
이런식으로 할려니 엄두가 안납니다.
INSERT INTO TABLE_B VAULES ( :OLD.FLD1, :OLD:FLD2 .................................................. OLD.FLD1024) WHERE FLD1 = OLD.FLD1
혹시
INSERT INTO TABLE_B SELECT :OLD.* FROM TABLE_A WHERE FLD1 = OLD.FLD1
이런 식으로 표현할 수없나요?
알려드린 방법은 필요로 하는 문자열을 생성해 내는 방법을 알려드린 것입니다.
쿼리에 의해 생성된 문자열을 이용해 소스편집작업에 이용하라고 알려드린거에요.
소스에 직접적으로 적용할 수 있는 방법이 아닙니다.
또한, 직접적으로 매번 쿼리로 읽어와 적용할 필요성도 없구요.
소스 편집작업은 어차피 단 한번 뿐입니다.
문법적으로는 order By 절을 거기에 사용할 수 없구요.
정렬된 형태의 결과물을 원한다면?
wm_concat 은 아쉽게도 정렬기능이 없네요.
listagg 를 이용하세요.
http://www.gurubee.net/article/55512
겸댕2후니 님이 제시한 방법대로 인라인뷰 안에서 정렬해 봤습니다.
정렬 결과대로 나오긴 하네요.
GROUP BY 와 함께 사용했을 때와 GROUP BY 가 없을 때의 결과가 차이가 나네요.
GROUP BY 가 없을 때는 조회 순서대로 합쳐지고요
GROUP BY 가 있을 때는 결과물의 순서를 예측 할 수 없네요.
하지만 지금 결과가 잘 나온다고 해서
나중에도 잘 나오리란 보장은 없습니다.
예전에 9i 에서 10g 로 넘오올 때 Group By 의 결과가 정렬되지 않았던 것 처럼요.
정렬된 결과물을 얻기 위해서는 정렬구문이 확실하게 보장되는 구문을 권하고 싶네요.