2011-11-01 5 views
3

아래 테이블을 작성하고 싶습니다.테이블이 존재하지 않으면 작성하고 Oracle에 존재하지 않으면 시퀀스를 작성하십시오.

create table TEST (
       id number NOT NULL PRIMARY KEY, 
       url varchar(1000) NOT NULL, 
       urlHash varchar(255) NOT NULL, 
       contentHash varchar(255), 
       modDate varchar(30), 
       contentLocation varchar(100), 
       status integer, 
       lastCrawlDate varchar(30)) ; 

그래서 내 질문은 쿼리가

있겠습니다 시퀀스 것 같은 시퀀스 -

create sequence test_seq start with 1 increment by 1 nomaxvalue; 

뭔가를 같은 방법으로 this-

Create Table TEST if doesn't exist 

같은입니다

Create sequence test_sequence if doesn't exist 

답변

10

당신은 익명 PL/SQL 블록을 할 수있는 :

DECLARE 
    t_count INTEGER; 
    v_sql VARCHAR2(1000) := 'create table TEST (
      id number NOT NULL PRIMARY KEY, 
      url varchar(1000) NOT NULL, 
      urlHash varchar(255) NOT NULL, 
      contentHash varchar(255), 
      modDate varchar(30), 
      contentLocation varchar(100), 
      status integer, 
      lastCrawlDate varchar(30))'; 
BEGIN 
    SELECT COUNT(*) 
    INTO t_count 
    FROM user_tables 
    WHERE table_name = 'TEST'; 

    IF t_count = 0 THEN 
    EXECUTE IMMEDIATE v_sql; 
    END IF; 
END; 
/

마찬가지로, 기존 순서에 대한보고에 맞게이 적응 USER_SEQUENCES을 사용할 수 있습니다.

+0

대단히 감사합니다. – MirlvsMaximvs

2

옵션.

할 수있는 것은 테이블과 시퀀스를 만들고 단순히 "이미 존재하는 테이블"오류를 무시하는 것입니다.

+0

내 응용 프로그램의 기능은 처음 실행하면 테이블을 만들고 시퀀스도 생성합니다. 그리고 나서 오라클 데이터베이스에 값을 삽입합니다. 하지만 두 번째로 해당 응용 프로그램을 다시 실행할 예정입니다. 그런 다음 동일한 테이블에 다시 삽입 할 경우 어떤 영향도 미치지 않도록'table already exists' 오류가 발생합니다. 내가 가진 유일한 것은 테이블이 이미 존재한다는 것입니다. 그게 맞습니까? – ferhan

+0

수정하십시오. 이 오류를 피하려면 시스템 뷰'ALL_TABLES'와'ALL_SEQUENCES'을 질의하고 테이블과 시퀀스가 ​​이미 존재하는지 확인하십시오. –

관련 문제