Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-01427 / 25 сообщений из 35, страница 1 из 2
17.10.2019, 20:25
    #39877899
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Всем привет!

Перезаливаю базу измененными значениями за несколько лет (через update). Пару первых лет перезалил без проблем. А вот при обновлении текущего года выдает ошибку Ошибка ORA-01427: подзапрос одиночной строки возвращает более одной строки.
Но таблица, которая формируется кодом для обновления - уникальна (если объединить все строки и попробовать найти дубликаты, то их не будет).

Подскажите, пожалуйста, почему происходит такая ошибка при обновлении таблицы?
...
Рейтинг: 0 / 0
17.10.2019, 21:28
    #39877926
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeпочему происходит такая ошибкаочевидно же
...
Рейтинг: 0 / 0
17.10.2019, 21:30
    #39877927
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Без конкретного запроса - "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит".
...
Рейтинг: 0 / 0
17.10.2019, 21:32
    #39877928
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMike,

Ну так возьми запусти подзапрос и посмотри сколько и какие строки он возвращает. Это даст начальную информацию что пошло не так как "Пару первых лет".

SY.
...
Рейтинг: 0 / 0
18.10.2019, 07:43
    #39877990
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeПодскажите, пожалуйста, почему происходит такая ошибка при обновлении таблицы?Потому что автор - альтернативно одарённый хомо эректус.

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
18.10.2019, 10:33
    #39878066
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
SY,

В этом и суть, что строки уникальные получаются.

Вот сам код:

update dsbd_margin_trans t1
set (t1.mdr,t1.id_saler)=(select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount,
sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR
FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t
JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl
LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3
WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3
GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)
where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS')
and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05');
commit

До даты в фильтре ошибку не выдавал, все обновлял успешно
...
Рейтинг: 0 / 0
18.10.2019, 10:51
    #39878084
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeSY,


Вот сам код:

До даты в фильтре ошибку не выдавал, все обновлял успешно

select t1.rowid,count(*) cc from
--update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=
(select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount,
sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR
FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t
JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl
LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3
WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3
GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
,dsbd_margin_trans t1
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)
where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS')
and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05');
group by t1.rowid
having count(*)>1


что-то возвращает?

.....
stax
...
Рейтинг: 0 / 0
18.10.2019, 10:54
    #39878087
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeсам кодЕсли на t.dt, t.grafnum, t.id_pos допускается несколько t.id_saler, то может получиться несколько строк.
...
Рейтинг: 0 / 0
18.10.2019, 10:55
    #39878088
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Stax,
Возвращает 2 ошибки:
- столбец определен неоднозначно
- неверно предложение на языке SQL
...
Рейтинг: 0 / 0
18.10.2019, 10:58
    #39878094
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeВ этом и суть, что строки уникальные получаются.Заблуждаешься.

IronMike
Код: plsql
1.
2.
                 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
                 where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)

Два продавца до поры до времени сидели в засаде, а потом устроили подлянку говнокоду, продав на одинаковую сумму.
...
Рейтинг: 0 / 0
18.10.2019, 11:02
    #39878100
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Elic,
Да не, я запускал подзапрос, выгружал его в Excel, и соединял строки по этим 4-м критериям: ни одной повторяющейся не было
...
Рейтинг: 0 / 0
18.10.2019, 11:02
    #39878102
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeДа не, я запускал подзапрос, выгружал его в Excel, и соединял строки по этим 4-м критериям: ни одной повторяющейся не былоElicЗаблуждаешься.
...
Рейтинг: 0 / 0
18.10.2019, 11:09
    #39878109
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Stax,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select t1.rowid,count(*) cc from
--update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=
(select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount,
sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR
FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t
JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl
LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3
WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3
GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
,dsbd_margin_trans t1
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)
where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS')
and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05')[color=red];[/color]
group by t1.rowid



Досадная опечатка о которой не догадался автор сего поста.

С глубоким уважением к Stax.
...
Рейтинг: 0 / 0
18.10.2019, 11:18
    #39878117
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeStax,
Возвращает 2 ошибки:
- столбец определен неоднозначно
- неверно предложение на языке SQL
добавте нужный алиас

Вам надо селестом повторить update (найти где возвращает более одной строки.)


.....
stax
...
Рейтинг: 0 / 0
18.10.2019, 11:23
    #39878125
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeВ этом и суть, что строки уникальные получаются.

Чудес не бывает.

IronMikeupdate dsbd_margin_trans t1
set (t1.mdr,t1.id_saler)=(select MDR,id_saler from (

Отделите select от update и проверьте.

Есть волшебные средства PL/SQL Beautifier.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
update dsbd_margin_trans t1
   set (t1.mdr, t1.id_saler) =
       (select MDR, id_saler
          from (SELECT t.dt,
                       t.grafnum,
                       t.id_pos,
                       t.id_saler,
                       sum(amount) as amount,
                       sum(CASE
                             WHEN t.id_type = 1 THEN
                              det.reward
                             ELSE
                              det.reward * -1
                           END) + sum(CASE
                                        WHEN t.id_type = 1 THEN
                                         det.discount
                                        ELSE
                                         det.discount * -1
                                      END) AS MDR
                  FROM (select *
                          from transit2.trans@sun
                         where id_cont in
                               ('8CAAEFEA6E0C4D1094B1139F182B6AF1',
                                'EF5D606A6E1A47E0AEC712CFF89B030F',
                                '64B1A95E8E244EBDE053044A14ACEA8A')) t
                  JOIN transit2.services@sun ser
                    ON ser.id_usl = t.id_usl
                  LEFT JOIN transit2.trans_detail@sun det
                    ON det.id_trans = t.id_trans
                   and det.id_type = 3
                 WHERE ser.uname = 'л'
                   AND t.grafnum > 0
                   AND t.id_type != 3
                 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
         where t1.grafnum = t2.grafnum
           and t1.id_pos = t2.id_pos
           and t1.dt = t2.dt
           and t1.amount = t2.amount)
 where t1.main_id in
       (select id_cont
          from v_tmp_business_products
         where nvl(name_business, 0) = 'GPC RUS')
   and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05');

...
Рейтинг: 0 / 0
18.10.2019, 11:28
    #39878133
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IgorSm,

недоглядел ;

но сути не меняет, надо повторить логику update

....
stax
...
Рейтинг: 0 / 0
18.10.2019, 12:17
    #39878176
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IgorSm,

здесь тоже какие-то опечатки есть - выдает аналогичную ошибку
...
Рейтинг: 0 / 0
18.10.2019, 12:48
    #39878200
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeIgorSm,

здесь тоже какие-то опечатки есть - выдает аналогичную ошибку

надо акуратненько избавится от ошибок
типа
select r,count(*) cc from
--update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=
(select MDR,id_saler,t1.dt,main_id,t1.rowid r from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount,
sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR
FROM (select * from trans where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t
JOIN services ser ON ser.id_usl = t.id_usl
LEFT JOIN trans_detail det ON det.id_trans=t.id_trans and det.id_type=3
WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3
GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
,dsbd_margin_trans t1
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)
where main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS')
and (dt >= date '2019-04-01' and dt < date '2019-04-05')
group by r
having count(*)>1
/

какую ошибку выдает?

.....
stax
...
Рейтинг: 0 / 0
18.10.2019, 12:48
    #39878201
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeздесь тоже какие-то опечатки есть - выдает аналогичную ошибкуНу так включи уже мозг, начни помогать себе сам.

А Станислав - тряпка. Всякое чмо его гнобит, а он ещё и извиняется.
...
Рейтинг: 0 / 0
18.10.2019, 12:53
    #39878206
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Stax,
Сейчас выдает ошибку "таблица или представление пользователя не существует"
...
Рейтинг: 0 / 0
18.10.2019, 12:55
    #39878209
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Elic,
Я обратился за помощью к форуму, так как я не знаю как решить эту задачу.
Конкретно тебя я не звал на помощь.
...
Рейтинг: 0 / 0
18.10.2019, 13:00
    #39878213
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeКонкретно тебя я не звал на помощь.Это публичный форум. Но оставаться на ручнике - это твоё неотъемлемое право.
...
Рейтинг: 0 / 0
18.10.2019, 13:03
    #39878216
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeСейчас выдает ошибку "таблица или представление пользователя не существует"
ИМХО. Такую же ошибку получат почти 100% кто попробует выполнить твой код.
...
Рейтинг: 0 / 0
18.10.2019, 13:32
    #39878238
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
IronMikeStax,
Сейчас выдает ошибку "таблица или представление пользователя не существует"

акуратненько где надо дорисуйте transit2,@sun
(у меня нет Ваших таблиц/схем/баз)


ps
если есть много прав, мож для Вас будет проще найти ошибку примерно так

1) создать дубль таблички create table dsbd_margin_trans2 AS select * from dsbd_margin_trans ;
2) добавить отладочный столбец
alter table dsbd_margin_trans2 ADD (cc int);
3) update тестовой таблички

update dsbd_margin_trans2 t1
set (t1.mdr,t1.id_saler,cc)=(select max(MDR),MAX(id_saler).count(*) from (SELECT ...

4) глянуть где/для кого "двоит"
select * from dsbd_margin_trans2 where cc>1

5) принять меры ...


.....
stax
...
Рейтинг: 0 / 0
18.10.2019, 13:44
    #39878249
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-01427
Stax,

Я не понимаю этой части кода (выделил цветом):

select t1.rowid,count(*) cc from
--update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=
(select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount,
sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR
FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t
JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl
LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3
WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3
GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2
,dsbd_margin_trans t1
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount)
where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS')
and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05');
group by t1.rowid

t1 точно на своем месте?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-01427 / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]