2017-09-05 8 views
-1
UPDATE STOCKVALUE A 
    SET A.LOCATION=(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4') 

Error:ORA-01427: single-row subquery returns more than one row私は、エラーコードが不平を言っている何

+0

エラーメッセージはクリアです。サブクエリが複数のレコードを返すインスタンスがあります。したがって、Oracleは、 'STOCKVALUE'表の指定されたレコードの更新で使用する' LOCID'値を把握することはできません。 –

+0

LOCATIONは1つの値に設定する必要があります。あなたのサブクエリを確認してくださいそれはより多くの1行を返しています。DCCUMINVBASIC BのどこからA.MAPNAME = 'invdc4'を選択します。 – Ashish451

+0

私もStockvalueの位置IDを与えました(A.MAPNAME = 'invdc4'とa.location = 10155000000024) – siva

答えて

-1

を11gのOracleで別のテーブルに一つのテーブルを更新カントクエリ

SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4'

が複数行を返しているので、外側のクエリが実行できないということですそれは単一の値を必要とするからです。このクエリで

+0

私はDISTINCTでもSame ERRORを使用しました。 – siva

+0

UPDATE STOCKVALUE A SET A.LOCATION =(A.DOCID = B.DOCIDとA.MAPNAME = 'invdc4'AND.MPLANTがNULLである場合、STOCKVALUE A、DCCUMINVBASIC BからDISTINCT B.LOCIDを選択します) – siva

0

(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4') 

あなたは、テーブルBの上にあり、あなたは、これは意味をなさないテーブルA.オーバー条件をしようとしています。

あなたのクエリは次のようになります。

(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE B.XXXX='yyyyy') 

そして、それは、(1行と1列の結果)単一の値を返す必要があります。

+0

在庫値のIDを指定しましたA.MAPNAME = 'invdc4'とa.location = 10155000000024) – siva

+0

私はちょうど答えを編集しました。 –

0

このような場合、複数の結果を提供することで、どの行が問題を引き起こしているのかを最もよく理解することができます。 1より大きい数と更新ステートメントを実行する前に、選択最初の問題を解決して行のこの場合のチェックには

SELECT (SELECT COUNT(*) FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4') CNT FROM STOCKVALUE A; 

:ここでの問題の原因となった行を理解するために 、あなたは最初のようなSELECT文を作成する必要があります。

+0

OKですが、DCCUMINVBASICテーブルの4つの位置IDです。両方のテーブルの更新在庫テーブルがよく一致します.DOCID – siva

+0

これら2つのテーブルのDDLとサンプルデータセットを入力してください。 –

0

は(もDISTINCTで)このクエリを実行してください:

SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4' 

、あなたがエラーであるかを確認します。

関連する問題