0
답변 1 오라클에서 테이블이 없으면 CREATE 있으면 ALTER 하는 방법 답변 1 (/p/sql)
개발자이긴 한데 오라클에 대한 지식이 좀 부족합니다. 고객사에 전달할 자회사 패키지의 DB 생성 Script를 작성중인데 고객사의 현재 테이블 상황이 어떤지 ..

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

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

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

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

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

 

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

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

오라클 Oracle Query plsql sql create alter
16일 전 uutopia
+
uutopia 님께서 16일 전에 SQL에 올린 질문

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

0
답변 1 오라클에서 테이블이 없으면 CREATE 있으면 ALTER 하는 방법 답변 1 (/p/sql)
개발자이긴 한데 오라클에 대한 지식이 좀 부족합니다. 고객사에 전달할 자회사 패키지의 DB 생성 Script를 작성중인데 고객사의 현재 테이블 상황이 어떤지 ..

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

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

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

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

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

 

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

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

오라클 Oracle Query plsql sql create alter
16일 전 uutopia
+
uutopia 님께서 16일 전에 SQL에 올린 질문
댓글 쓰기

1개의 답변

0
[답변]오라클에서 테이블이 없으면 CREATE 있으면 ALTER 하는 방법 1 (/p/sql)
원하시는 해결을 위해 많은 상용 데이터베이스에서는 CRAETE OR REPLABE TABLE 이라는 구문을 제공하지만 오라클에서는 테이블에 대하여 CREATE OR REPLACE 구..

원하시는 해결을 위해 많은 상용 데이터베이스에서는 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;
/

 

16일 전 kimho
+
kimho 님께서 16일 전에 SQL에 올린 글
사탕 주기
보관하기
0
 
uutopia 15일 전
답변 갑사합니다.
구글링에서도 비슷한 케이스에 execute immediate를 사용하는 것 같긴 한데 create or alter를 사용하는 케이스를 못찾겠더라구요. 이 방법으로 한번 해봐야 겠네요.
댓글 쓰기
조회수 390
답글 1
URL