- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Oracle8iのUPDATE文)
Oracle8iのUPDATE文でのエラーについて
このQ&Aのポイント
- Oracle8iのUPDATE文を使用して表Aと表Bの列8を上書きしようとしていますが、ORA-01427エラーが発生しています。
- エラーメッセージによると、単一行副問い合わせで2つ以上の行が返されているようです。
- このエラーからの抜け道を見つけられず、解決策を探しています。アドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ただの投稿の書き間違いだとすると、 表B.列1がユニークである以上、エラーは出なさそうですね・・・。 とりあえず、私だったらこう進めます。 (1)SET直後の副問い合わせに"AND ROWNUM=1"を付ければ エラーがなくなる事を確認=間違いなくここが原因だと特定 (2)UPDATE文をなるべくコピペで編集して、 表A.列1の値と、(select 表B.列8~)のcountとを出力するSELECTに変えて実行 (3)countが>1の表A.列1の値で、select 表B.列8~の部分を実行して結果を見る このくらいで何か分かる予定です(^^; ローダのdirectモードで表Bに重複データを入れたら、こうなる・・かも・・ あとはSQLの微妙な間違いで、意図した物になっていない、とか そのくらいしか私には見当付かないです・・・。
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.2
UPDATE 表A SET 表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列2) ←列2??? WHERE 表A.列1 =ANY(SELECT 表B.列1 FROM 表B)
質問者
補足
書き間違いでした、申し訳ありません。
- thatsthat
- ベストアンサー率55% (15/27)
回答No.1
ただの書き間違いかと思ったのですが、 他におかしな所も探せなかったのでひとまず・・・ SET直後、 > 表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列2) この最後の「表B.列2」は「表B.列1」ですよね?
質問者
補足
失礼しました。 表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列1) が正しい一つ目の副問い合わせの内容です。
お礼
この表だけできないので、何かミスをしてしまったのかもしれません。アドバイスは早速試させて頂きます。ありがとうござました