2010-06-17 20 views
0

Можете ли вы сказать мне, как обновить несколько строк в оракула, как когда я уволил обновление заявление он дал мне следующую ошибкуОбновление нескольких строк в оракула

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: однорядные подзапрос возвращает более чем один ряд

заранее спасибо

+2

Ни один из ответов, которые вы получили на * какие-либо вопросы раньше, достаточно хорош для принятия (вы принимаете ответы, нажав галочку влево)? –

+0

Спасибо, что разместили код. Вы также можете правильно отформатировать код, отложив каждую строку на 4 пробела (или выделите и нажмите кнопку «код» на панели инструментов). –

ответ

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

)

Хотя, я буду честен, я не совсем уверен, что вы пытаетесь сделать с этим запросом ,

+0

mi хочет обновить записи в поле PREVIOUS_DAY_CLOSE в таблице BI_BSELATEST_LATESTPRICESTEST со значениями, которые я получаю в инструкции выбора. info поможет вам .. – devang

+0

@devang - Правильно, поэтому для определенной строки 'BI_BSELATEST_LATESTPRICESTEST', * which * значение, которое вы получаете из инструкции select, вы хотите. Один столбец из одной строки может иметь только одно значение в любой момент времени, правильно? –

+0

Да, правильно, я получаю только когда значение для одного столбца ... но все же он дает мне ту же ошибку. ORA-01427: однострочный подзапрос возвращает более одной строки. – devang

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 из подзапроса, и вместо этого говорит базу данных, чтобы использовать столбцы из таблицы, он обновляет для фильтрации подзапроса. Как вы ее написали, база данных не имела возможности узнать, как соотнести столбцы от подзапроса с обновляемой таблицей.

Смежные вопросы