0

更新ステートメントを実行したときに次のエラーが発生したため、Oracleの複数の行を更新する方法を教えてください

UPDATE  BI_BSELATEST_LATESTPRICESTEST
SET PREVIOUS_DAY_CLOSE =
    (SELECT  DISTINCT aa.DLYPRICE_CLOSE 
     FROM  DATAFEED_EQTY.FEED_DLYPRICE aa  ,
           (
           SELECT  a.sc_code ,  MAX(a.DLYPRICE_DATE) as max_date
           from    DATAFEED_EQTY.FEED_DLYPRICE a,BI_BSELATEST_LATESTPRICES b
           where   a.SC_CODE = b.SC_CODE
           and    a.ST_EXCHNG = 'BSE'
           and    a.DLYPRICE_DATE <   b.upd_time 
           group by a.sc_code
         ) bb
    WHERE  aa.SC_CODE =  bb.sc_code
    and    aa.DLYPRICE_DATE = max_date)

ORA-01427:単一行のサブクエリが複数の行を返します

前もって感謝します

4

2 に答える 2

2

ステートメントのサブクエリが間違っています。WHEREまたは句のいずれかをFIRST省略しましたが、そうでない場合でも複数の値を返すようになりました。

あなたは基本的PREVIOUS_DAY_CLOSEに同時に複数の値であるべきだと言おうとしています。副選択のWHERE句を省略したと思います。これにより、その副クエリの結果が、更新しようとしている特定の行にリンクされます。次のようなもの(太線に注意):

UPDATE  BI_BSELATEST_LATESTPRICESTEST
SET PREVIOUS_DAY_CLOSE =
    (SELECT  DISTINCT aa.DLYPRICE_CLOSE 
     FROM  DATAFEED_EQTY.FEED_DLYPRICE aa  ,
           (
           SELECT  a.sc_code ,  MAX(a.DLYPRICE_DATE) as max_date
           from    DATAFEED_EQTY.FEED_DLYPRICE a,BI_BSELATEST_LATESTPRICES b
           where   a.SC_CODE = b.SC_CODE
           and    a.ST_EXCHNG = 'BSE'
           and    a.DLYPRICE_DATE <   b.upd_time 
           group by a.sc_code
         ) bb
    WHERE  aa.SC_CODE =  bb.sc_code
    and    aa.DLYPRICE_DATE = max_date

   AND bb.sc_code = BI_BSELATEST_LATESTPRICESTEST.sc_code

    )

正直に言うと、このクエリで何をしようとしているのか正確にはわかりません。

于 2010-06-17T07:27:09.793 に答える
0

私はあなたが欲しいものはこれだと思います:

UPDATE  BI_BSELATEST_LATESTPRICESTEST b
SET PREVIOUS_DAY_CLOSE =
    (SELECT  DISTINCT aa.DLYPRICE_CLOSE 
     FROM  DATAFEED_EQTY.FEED_DLYPRICE aa  ,
           (
           SELECT  a.sc_code ,  MAX(a.DLYPRICE_DATE) as max_date
           from    DATAFEED_EQTY.FEED_DLYPRICE a
           where   a.SC_CODE = b.SC_CODE
           and    a.ST_EXCHNG = 'BSE'
           and    a.DLYPRICE_DATE <   b.upd_time 
           group by a.sc_code
         ) bb
    WHERE  aa.SC_CODE =  bb.sc_code
    and    aa.DLYPRICE_DATE = max_date)

これにより、サブクエリからBI_BSELATEST_LATESTPRICESTESTが削除され、代わりに、更新しているテーブルの列を使用してサブクエリをフィルタリングするようにデータベースに指示されます。あなたが書いたように、データベースには、サブクエリの列を更新されるテーブルに関連付ける方法を知る方法がありませんでした。

于 2010-06-17T12:19:12.330 に答える