2017-05-03 2 views
2

웹 응용 프로그램을 사용하여 웹 서버를 시작 (AppStarter)하는 응용 프로그램이 있습니다. 웹 응용 프로그램에는 이주 스크립트 (이동 경로)가 있습니다.ALTER TABLE은 존재하지 않는 경우 제약 조건을 생성합니까?

AppStarter에서 JDBC를 통해 테이블의 일부 데이터를 쓰고 싶습니다. 그러나 그것이 존재하지 않으면 테이블을 만들고 싶습니다. 테이블에는 몇 가지 제약 조건이 있습니다. AppStarter 내에서 내가 다음 명령을 실행

는 :

CREATE CACHED TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER (
    ID VARCHAR(32) PRIMARY KEY NOT NULL, 
    VERSION INTEGER, 
    USER_ID VARCHAR(32)NOT NULL, 
    ROLE_ID VARCHAR(32) NOT NULL, 
    PARAMETER VARCHAR(255) NOT NULL 
); 

ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_USER_ID FOREIGN KEY(USER_ID) REFERENCES PUBLIC.CORE_USER(ID) NOCHECK; 
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_ROLE_ID FOREIGN KEY(ROLE_ID) REFERENCES PUBLIC.CORE_USER_ROLE(ID) NOCHECK; 

웹 응용 프로그램은이 테이블에서 몇 가지 정보를 읽고 테이블을 생성합니다. 지금은 SQL 이주 스크립트

CREATE CACHED TABLE IF NOT EXISTS PUBLIC.CORE_USERROLE_TO_PARAMETER (
    ID VARCHAR(32) PRIMARY KEY NOT NULL, 
    VERSION INTEGER, 
    USER_ID VARCHAR(32)NOT NULL, 
    ROLE_ID VARCHAR(32) NOT NULL, 
    PARAMETER VARCHAR(255) NOT NULL 
); 

을 가지고 있지만 어떻게 이미 존재하지 않는 경우에만 제약 조건을 만들려면 어떻게해야합니까? 사전에

감사

현재

제약이

select * from INFORMATION_SCHEMA.CONSTRAINTS WHERE CONSTRAINT_NAME='CURTRP_USER_ID' 

존재하지만 어떻게 내가 H2있는 경우 쿼리에이를 구축 할 경우 내가 얻을 수

편집 : 내가 할 수있는 전체에서 제약 조건 부분을 마이그레이션 스크립트로 이동 시키지만, 이것은 다소 잘못된 것처럼 보입니다.

저는 H2 데이터베이스로 작업하고 있습니다.

+0

'존재하지 않으면'시도 했습니까? 문서가 이것이 가능하다고 제안하는 것 같다 http://www.h2database.com/html/grammar.html#constraint_name_definition – Sonata

답변

1

내 의견을 따라이 가능해야한다 WHERE INFORMATION_SCHEMA.CONSTRAINTS SELECT * FROM 외래 키 제약 조건을 얻기 위해이 쿼리 :

ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT IF NOT EXISTS PUBLIC.CURTBP_USER_ID FOREIGN KEY(USER_ID) REFERENCES PUBLIC.CORE_USER(ID) NOCHECK; 
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT IF NOT EXISTS PUBLIC.CURTBP_ROLE_ID FOREIGN KEY(ROLE_ID) REFERENCES PUBLIC.CORE_USER_ROLE(ID) NOCHECK; 
+0

명백하게, 나는 이것을 시도했다. 그러나 명백하게 나는 시험하는 것을 엉망으로 만들었다. 감사합니다 – kism3t

0

사용 CONSTRAINT_TYPE이 = '참조'

-1

당신은 ALTER를 시도 할 수 있습니다 TABLE IF EXISTS는 존재하는 경우에 존재합니다. 귀하의 응용 프로그램에 대한 책임이있는 경우에만 다른 응용 프로그램이나 스크립트에 의해 처리되지 않습니다.

+0

이것은 완전히 읽을 수 없습니다. [markdown] (http://stackoverflow.com/editing-help)을 사용해보십시오. 또한 * full stops * ('.')을 사용하여 문장의 끝을 표시하십시오. – derM

관련 문제