Oracle

오라클에서 테이블이 없으면 CREATE 있으면 ALTER 하는 방법

0
개발자이긴 한데 오라클에 대한 지식이 좀 부족합니다. 고객사에 전달할 자회사 패키지의 DB 생성 Script를 작성중인데 고객사의 현재 테이블 상황이 어떤지 알 수가 없습니다. 우리테이블이 이미 존재할 수도 있고 존재하지 않을 수도..

개발자이긴 한데 오라클에 대한 지식이 좀 부족합니다.

고객사에 전달할 자회사 패키지의 DB 생성 Script를 작성중인데 고객사의 현재 테이블 상황이 어떤지 알 수가 없습니다.

우리테이블이 이미 존재할 수도 있고 존재하지 않을 수도 있습니다.

존재할 경우 테이블을 ALTER해야 하고 존재하지 않을 경우 CREATE 해야 합니다.

이걸 하나의 Script로 만드는 방법이 있을까요?

 

즉, Script를 DB툴에서 실행 시 테이블이 존재하지 않으면 CREATE문을 실행해서 테이블을 생성하고, 이미 존재하면 ALTER를 실행해서 테이블의 구조를 바꾸는 쿼리를 만들 수 있나요?

하나의 쿼리로 만들어 지면 제일 좋겠지만 불가능 하다면 PL/SQL을 써서 IF문을 쓰거나 다양한 방법으로 시도 가능합니다.

오라클 Oracle Query plsql sql create alter
uutopia 2020-09-07
+
uutopia 님께서 2020-09-07에 Oracle에 올린 질문

댓글

1개의 답변

0
원하시는 해결을 위해 많은 상용 데이터베이스에서는 CRAETE OR REPLABE TABLE 이라는 구문을 제공하지만 오라클에서는 테이블에 대하여 CREATE OR REPLACE 구문을 제공하지 않습니다.   따라서 PL/SQL 등을 이용하여 별도로 작성해야 ..

원하시는 해결을 위해 많은 상용 데이터베이스에서는 CRAETE OR REPLABE TABLE 이라는 구문을 제공하지만

오라클에서는 테이블에 대하여 CREATE OR REPLACE 구문을 제공하지 않습니다.

 

따라서 PL/SQL 등을 이용하여 별도로 작성해야 할 것 같습니다.

참고로 아래는 테이블 칼럼 존재 여부를 판단해서 칼럼을 추가하는 예입니다.

SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  v_col_exists NUMBER 
BEGIN
  SELECT count(*) INTO v_col_exists
    FROM user_tab_cols
    WHERE column_name = 'EFFECTIVE_DATE'
      AND table_name = 'MEMBERS';

   IF (v_col_exists = 0) THEN
      EXECUTE IMMEDIATE 'ALTER TABLE members ADD effective_date DATE';
   ELSE
    DBMS_OUTPUT.PUT_LINE('The column effective_date already exists');
  END IF;
END;
/

 

kimho 2020-09-07
+
사탕 주기
kimho 님께서 2020-09-07에 Oracle에 올린 글
보관하기
0
 
uutopia 2020-09-08
답변 갑사합니다.
구글링에서도 비슷한 케이스에 execute immediate를 사용하는 것 같긴 한데 create or alter를 사용하는 케이스를 못찾겠더라구요. 이 방법으로 한번 해봐야 겠네요.

댓글

조회수 977
답글 1
URL