2010-12-16 5 views
0

以下は、SQL文がDB2 LUW 9.7では正常に動作しますが、DB2 for z/OS 9.1では動作しません。なぜ、どのように動作させるのですか?以下のSQL文をDB2 for z/OSで実行できないのはなぜですか?

CREATE TABLE HIERARCHY_TEST ( 
    HIER_URI VARCHAR(255) NOT NULL, 
    PARENT_URI VARCHAR(255), 
    TITLE VARCHAR(1000) NOT NULL, 
    MIMETYPE VARCHAR(100), 
    DESCRIPTION VARCHAR(1000), 
    MODIFIED_BY VARCHAR(1000),  
    CONSTRAINT PK_SFIND_HIERARCHY PRIMARY KEY (HIER_URI), 
    CONSTRAINT FK_ND_HIERARCHY_1 FOREIGN KEY (PARENT_URI) REFERENCES HIERARCHY_TEST (HIER_URI) 
) 

私が得たエラーメッセージは、 "DEV.FIND_HIERARCHY_TESTがUNDEFINED NAME IS。SQLCODE = -204、SQLSTATE = 42704、DRIVER = 3.53.71"

おかげです。

+0

私はDB2が自己参照外部キーでどのように動作するのかよくわかりません。外部キーなしでテーブルを定義しようとしましたが、その後に 'ALTER TABLE'を使って制約を追加しましたか? –

+1

DEV.FIND_HIERARCHY_TESTがスクリプト内のオブジェクトの名前ではないことは興味深いことです。サーバーからこの応答を引き起こすのは間違いなくスニペットですか? –

+0

私の投稿を編集していただきありがとうございます。私はちょうど別のALTER TABLEステートメントでPKとFKを定義しようとしました。しかし、元の文がすべてのDB2データベースで機能しないのはなぜですか? DB2 for z/OSと他のDB2データベースの違いは何ですか? –

答えて

4

DB2 9.7がAutomatic Revalidationと呼ばれる機能を追加したため、Linux/UNIX/Windows版DB2 9.7でこの文が動作する理由。この機能は、DB2 9.1 for z/OSには存在しません。

この機能を使用すると、親オブジェクトがまだ存在しない場合でも、別のオブジェクトに依存するオブジェクトを作成できます。 (つまり、まだ存在しないテーブルでビューを作成することもできますし、存在しないテーブルで外部キーを定義することもできます)。

新しく作成されたオブジェクトは無効になり、DB2は次回アクセス時に自動的に再検証します。この動作は、auto_revalデータベース構成パラメーターによって制御されます。

上記のコメントに記載されているように、両方の環境で同じステートメントを実行する必要がある場合は、CREATE TABLEから外部キー制約を削除し、別のALTER TABLEステートメントとして実行する必要があります。

+0

良い情報;おそらくあなたが私のコメントからソリューションを追加した場合、Bruceはこれを正しくマークすることができます。 –

+0

偉大な答え、ありがとうすべて。 –

関連する問題