0

私は DB2 を学習していますが、データベースでいくつかのオプションをテストしているときに問題が発生しました。

私はこのような2つのテーブルを持っています:

Country
=========
IdCountry  -- PK
Name

State
=========
IdState  -- PK
IdCountry  -- FK to Country.IdCountry
Name
Code

そして、私は次のようなクエリを使用しています:

SELECT IdState, Name 
FROM Tables.State 
WHERE IdCountry = ? 

どこ ?はすべて動作IdCountryしており、すべて正常に動作しました。

次に、オプションのデフォルト情報を使用してdb2コントロールセンターで整合性の設定を使用し、プロセスは成功しましたが、クエリで結果が得られません。

私は使用してみました:

SELECT * 
FROM Tables.State 
Where IdCountry = ? 

そしてそれは私に結果を返します。

テーブルにテストを作成しているときに、新しい状態を追加しようとすると、* の代わりに列名を使用してクエリに表示されますが、古いレコードはまだ失われています。

何が起こっているのかわかりません。誰か考えがありますか?

事前に感謝します。私の下手な英語で申し訳ありません。

4

1 に答える 1

0

ここでは、Linux/Unix/Windows DB2 を使用していると想定しています。z/OS にはSET INTEGRITYコマンドがなく、iSeries Info Center でクイック検索を行っても、それについて何も見つけることができなかったからです。


テーブルがまだ「整合性の設定保留」状態 (以前は と呼ばれていた) にある可能性CHECK PENDINGがあります。SYSCAT.TABLESこのクエリを使用してチェックすることで、この理論をテストできます。

SELECT TRIM(TABSCHEMA) || '.' || TRIM(TABNAME) AS tbl,
       CASE STATUS
            WHEN 'C' THEN 'Integrity Check Pending'
            WHEN 'N' THEN 'Normal'
            WHEN 'X' THEN 'Inoperative'
       END As TblStatus
FROM SYSCAT.TABLES
WHERE TABSCHEMA NOT LIKE 'SYS%'

テーブルが表示された場合は、次のSET INTEGRITYコマンドを使用してテーブルをチェック済みステータスにする必要があります。

SET INTEGRITY FOR Tables.State IMMEDIATE CHECKED
于 2012-05-29T17:38:57.297 に答える