• ベストアンサー

oracle ora-02298

テーブルが2つあり、 テーブル1 ID1 ID2 ID3 [PRIMARY-KEY制約] ID1 ID2 テーブル2 ID1 ID4 ID2 [PRIMARY-KEY制約] ID1 ID4 のテーブルがあります。 テーブル2にてFOREIGNKEY制約(ID1とID2)を実施すると ora-02298が発生してしまいます。 どのようにすればFOREIGNKEY制約をかけれますか?

  • Oracle
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

インターネットで検索できる、Oracleのエラーリファレンスは、見られましたか? (”明白”としかかかれていませんが) 2つのテーブルには、すでにレコードがそんざいしますよね。 テーブル2に、ゴミレコードが存在するのでは? つまり、テーブル1には存在しない、ID1,ID2の組み合わせを持つレコードが存在しませんか? NOT IN で、対象となるレコードを検索されては?

drgon_eye
質問者

お礼

助言ありがとうございました。 テーブル2にID2だけが違うレコードがありました。 レコードを修正し、正しくできました。 ありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

select ID1, ID2 from テーブル2 group by ID1, ID2 having count(*)>1; を投げて、結果が得られたらキー重複

drgon_eye
質問者

お礼

助言ありがとうございました。 重複はありませんでしたが、ID2が間違っておりました。

関連するQ&A

  • Oracleのcreate文で

    OracleのCreate文で、カラムに複数の制約を付ける方法を↓のサイトで見つけたのですが、 http://luna.gonna.jp/oracle/ora_const.html ちょっと、カラム名を変えたりして、このように↓書いてみたのですが、 create table Genereation_T ( Genereation_ID CHAR(3) not null, Genereation_Type VARCHAR2(10), Ins_dt DATE, Udp_dt DATE, Del_flg NUMBER(1), CONSTRAINT cons_p1 PRIMARY KEY(Genereation_ID), CONSTRAINT cons_u1 UNIQUE(Ins_dt), CONSTRAINT cons_f1 FOREIGN KEY(Udp_dt), REFERENCES Genereation_MASTER(Udp_dt), ); 「行10でエラーが発生し、キーワードがありません。」という表示がされます。 もう一個テーブルが必要なのでしょうか? エラー解消がわかる人お願いします。

  • oracleのimpdpでORA-39166

    ORALCEのexpdpおよびimpdpの勉強のために自宅環境で操作していたところ、 impdpにてORA-39166(オブジェクトが見つからない)が発生してしまいした。 いろいろ調べてみたのですが、解決に至ってないためお力添えをお願いいたします。 【環境】 OS : linux ※CentOS(64bit) ORALCE11gXE 【やりたいこと】 studyスキーマのTEST1テーブルをexpdpでエクスポート(content=data_only)し、 同じスキーマ内のTEST2テーブルにimpdpにてデータを入れる。 【発生までの操作】 1.expdp system/パスワード@XE directory=test_dir tables=study.TEST1 log=test_exp.log content=data_only 2.impdp system/パスワード@XE directory=test_dir dumpfile=expdat.dmp log=test_imp.log tables=study.TEST2 content=data_only 2の操作をしたタイミングで以下のメッセージ。 ORA-39002: invalid operation ORA-39166: Object STUDY.TEST2 was not found. 【備考】 ・TEST1およびTEST2はまったく同じテーブル構造です。studyユーザで作成してます。 ・STUDY.TEST2は存在します。 (「sqlplus study/パスワード@XE」でログインしdesc TEST2で確認できるため) ・exdpは正常に終了しており、dumpファイルは「expdat.dmp」で作成されています。 以上です。 ご教授のほどよろしくお願いいたします。

  • ORA-1555

    ORA-1555がいきなり発生する原因てありますか? いままで2年間まったく発生していなかったのですが、突然でました。データの量が、いきなり増えた等はないです

  • oracleのエラー(ORA-00932)の対処法

    お世話になります。 ACCESS上のAテーブルのデータをコピーしてデータを編集後、 再びアクセスからAテーブルにデータを追加したいと思っています。 ところが、「Aテーブルのデータをコピー」する時点でエラーになり、 テーブル内の項目が全て「#Name?」になってしまいます。 その際に表示されるアラートのエラーの内容は、以下の通りです。 -------------------------------------------------------------------------------- ODBC--呼び出しが失敗しました。」 [Oracle][ODBC][Ora]ORA-00932:データ方が一致しません:%sが予想されましたが%sです。 (#932) -------------------------------------------------------------------------------- エラーコードを検索したのですが、どうしたら解決できるのかわかりません。 テーブルにリンクを張る際に何かしなければならなかったのでしょうか。 解決策をご存知の方、ご教示ください。 ちなみにACCESSのバージョンは2000です。

  • oracleのプライマリ・キー名の変更

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b

  • Oracle7.3で、「.ora」ファイルの中身を見る方法。

    ログのリセットに失敗し、Oracleが開けなくなりました。 データそのものは無事なはずです。 何とかデータを復旧したいのですが、 データファイルである「.ora」ファイルを開くための ツールなどはありませんか? Oracleの再インストール、テーブルの再定義などの 労力は覚悟の上です。

  • オラクルでエラー「ORA-00052」が起こります

    現在、ユーザーを削除して、また作成するようなことをおこなっています。 drop user を行った際に、 ORA-00052:最大エンキューリソース数 484が発生しました というエラーが出てしまいます。 これを回避する方法を求めています。 現象としては、まず1回目、drop user を行って create userを行います。 このときはエラーは発生しません。 次に同じ環境で、もう一回drop user を行うと、表題のエンキューエラーが 発生してしまいます。(よって、create userは成功しません) (1)エンキューリソースというのは、一回drop user を行えば開放されるものなのでしょうか?また、その状況(ロックと開放の状況)をウォッチすることなどは可能なのでしょうか?(そもそもなぜ不足してしまうのでしょうか??) (2)ENQUEU_RESOURCESという初期化パラメータの値を増やせばいいと 「oracle8i リファレンス・マニュアル」には書いてあったのですが いったいどれぐらい増やせばいいのでしょうか?またその値が妥当であるという判断は、どうやって下せばいいのでしょうか? (3)ENQUEU_RESOURCESを増やすとすると、初期化パラメータファイル?とやらを 編集すればよいのでしょうか?? たくさん書いてしまいましたが、ぜひともご教授ねがいます。 まだまだoralceを勉強し始めたばっかりで・・・・。

  • Oracleの.ora/.dbfファイルついて

    手元にOracleが入ったサーバーがあったのですが、故障して動かなくなってしまいました。なんとかオラクルのフォルダは取り出すことが出来ました。データを復元したいと思っております。 フォルダの中身を見たところ、「XXXXX.ora」や「XXXXX.dbf」というファイルが残っておりました。 最終的にはCSVなどに戻したいところですが、まずはOracleに取り込みたいと思っております。ちなみに元のテーブル名、構成などは不明です。 Oracleは11gです。 インポートする方法や中身を表示させる方法などがあればお教え頂ければと思います。

  • ORA-01438について

    OracleのPL/SQLの作成で "ORA-01438: 指定した精度を超えた値が列に指定されています"の エラーメッセージが出てしまいます。 PL/SQL上で、値が整数2桁+少数2桁 となるところを計算式を修正し 整数4桁になるようにしたところ、ORA-01438が出るようになりました。 ちなみに全てselectのはずです。 該当のカラムは副問い合わせを介してテーブルから呼んでいるのですが、 大本のカラムには精度(桁数)指定はありません。 いったいこれは何の精度指定に引っ掛かっているのでしょうか。 考えられる可能性を提示して頂けると大変助かります。

  • DBエラー 右カッコがありません

    BLOB型を用いたテーブルを作成したいのですが、 create文を発行したところ、エラーが発生しました。 ORA-00907右カッコがありません。 と出てしまいます。 わかるかたがいらっしゃいましたらご教授いただきたいです。 よろしくお願いします。 CREATE TABLE BLOB_BOOK ( ID NUMBER(5) NOT NULL, TITLE VARCHAR2(100), AUTHOR VARCHAR2(30), PRICE NUMBER(9), EVALUATION VARCHAR2(1), URL VARCHAR2(255), FILENAME BLOB(4M), CONSTRAINT BLOB_BOOK_IDX0 PRIMARY KEY ( ID ) )