2017-05-03 4 views
2

私はWebアプリケーションを使ってWebサーバーを起動(AppStarter)するアプリケーションを持っています。 Webアプリケーションには移行スクリプト(フライウェイ)があります。変更テーブルが存在しない場合、制約を作成できますか?

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

「IF NOT EXISTS」を試しましたか?ドキュメントはこれが可能であることを示唆しているようです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を試すことができますCREATE IF EXISTSのような存在するテーブル。あなたのアプリケーションの責任で、他のアプリやスクリプトでは処理されない場合。

+0

これは完全に判読不能です。 [markdown](http://stackoverflow.com/editing-help)の使用を検討してください。また、*完全停止*( '.')を使用して文末をマークしてください。 – derM

関連する問題