테이블 생성

CREATE TABLE 테이블명 (
컬럼명 데이터타입 디폴트값 NULL허용여부, 
컬럼명 데이터타입 디폴트값 NULL허용여부,
...
);

CREATE TABLE TABLE_aa (
column_A NUMBER(4) NOT NULL,
column_B DATE
column_C VARCHAR2(10) '디폴트값'
);

 

PK생성

ALTER TABLE 테이블명 ADD CONSTRAINT PK명 PRIMARY KEY (컬럼명, 컬럼명...);

ALTER TABLE TABLE_aa ADD CONSTRAINT column_A_pk PRIMARY KEY (column_A);

 

테이블 설명 (comment)

COMMENT ON 테이블명 IS '테이블설명';
COMMENT ON TABLE_aa IS '테이블설명';

COMMENT ON COLUMN 테이블명.컬럼명 IS '컬럼설명';
COMMENT ON COLUMN TABLE_aa.column_A IS '컬럼설명';

 

인덱스 생성

CREATE INDEX 인덱스명 ON 테이블명 (컬럼명, 컬럼명...);

CREATE INDEX index_aa ON TABLE_aa (column_A, column_B);

 

컬럼 데이터타입 변경

ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입(길이)
ALTER TABLE TABLE_aa MODIFY column_A VARCHAR2(50);

-- 같은 방식으로 null 허용여부, 디폴트 값도 변경 가능

 

컬럼명 변경

ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 새컬럼명;
ALTER TABLE TABLE_aa RENAME COLUMN column_A TO column_Z;

 

컬럼 추가, 삭제


-- 컬럼 추가
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 디폴트값 NULL허용여부;
ALTER TABLE TABLE_aa ADD column_S NUMBER(4) 0000 NOT NULL;
 
-- 컬럼삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
ALTER TABLE TABLE_aa DROP COLUMN column_A;

 

 

MS-SQL

 

데이터 복사 / 백업테이블 만들기

SELECT * INTO ~ FROM ~ WHERE ~

INSERT INTO ~ SELECT * FROM ~ WHERE ~

 

-- A_TABLE_COPY를 생성해서 A_TABLE 내용 복사
SELECT * INTO A_TABLE_COPY
FROM A_TABLE WHERE USER_NO = 1234;

-- B_TABLE_COPY가 존재할 때 B_TABLE 내용 복사
INSERT INTO B_TABLE_COPY
SELECT * FROM B_TABLE WHERE USER_NO = 5678;

 

단, INSERT INTO SELECT 구문을 사용하려면

기존 테이블과 타입 등이 일치해야 한다

 

 


 

ORACLE

 

데이터 복사 / 백업테이블 만들기

CREATE TABLE ~ AS SELECT * FROM ~ WHERE ~

INSERT INTO ~ SELECT * FROM ~ WHERE ~

 

-- A_TABLE_COPY를 생성해서 A_TABLE 내용 복사
CREATE TABLE A_TABLE_COPY AS
SELECT * FROM A_TABLE WHERE USER_NO = 1234;

-- B_TABLE_COPY가 존재할 때 B_TABLE 내용 복사
INSERT INTO B_TABLE_COPY
SELECT * FROM B_TABLE WHERE USER_NO = 5678;

 

단, INSERT INTO SELECT 구문을 사용하려면

기존 테이블과 타입 등이 일치해야 한다

 

WM_CONCAT과 DISTINCT 기능을 함께 이용하다 발생한 오류.

SELECT 결과에 CLOB 주소값?이 나오고, ORA-00932 오류가 발생했다.

 

문제가 되었던 함수는 아래의 wm_concat과 distinct...

 

wm_concat(distinct(컬럼명))

 

row 데이터를 A, B, C 이런식으로 자동 나열해주는 wm_concat...

찾아보니 이 wm_concat 함수가 10g 이상에서만 사용 가능하다고 해서,

혹시 버전호환 문제일까? 했는데 아니었다... (11g사용)

 

wm_concat은 데이터를 CLOB 타입으로 return하는데, 

중복을 제거해주는 DISTINCT 함수는 CLOB 타입을 지원하지 않아서 생긴 문제였다.

 

11g에서 사용 가능한 ListAgg 함수는 DISTINCT를 사용할 수 없어서

wm_concat 함수를 그대로 이용하는 방법을 찾아봤다.

 

to_char(wm_concat(distinct(컬럼명)))

 

이렇게 감싸주니 생각보다 간단히 해결되었다.

물론 진짜 CLOB 타입이 필요한 아주 긴 데이터였으면 곤란했겠지만,

실제로는 VARCHAR2(20 BYTE) 정도의 짧은 데이터가 한개, 많아야 두개 묶이는 데이터여서 큰 문제는 없을 것 같다.

 

 

 

참고

http://gurubee.net/article/55512

https://blog.daum.net/jwchoi1224/70

+ Recent posts