Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 столь невинный Update даёт ORA-600:  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
UPDATE ATASEND SET PosCount = (select count(TAPOSITIONID) from ATAPosition where atasend.nr = ATAPosition.ATASENDNR)

это если его из программы выполнять,

а если вручную (в PL/SQL-Developer), то всё OK и даёт:

28571 rows updated in 12,031 seconds
3 апр 06, 12:52    [2517359]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116123
Пока вроде бы вне зависимости от ORA-600, хотя кто знает ...
Всегда ли Ваш подзапрос возвращает одно значение ?
3 апр 06, 12:58    [2517416]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
dmidek
Всегда ли Ваш подзапрос возвращает одно значение ?

ORAngutang
select count(TAPOSITIONID)
и без группировки.
3 апр 06, 13:08    [2517477]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Из какого приложения дает ошибку? Есть ли возможность переписать запрос в приложении?
3 апр 06, 13:10    [2517497]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116123
Для всех ли строк таблицы c ATASENDR.NR есть ATASENDNR в таблице ATAPOSITION ?
3 апр 06, 13:16    [2517553]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
dmidek
Для всех ли строк таблицы c ATASENDR.NR есть ATASENDNR в таблице ATAPOSITION ?

Да это абсолютно без разницы, если нет строки, то получим 0.
select count(*) from dual where 1=2;
  COUNT(*)
----------
         0
3 апр 06, 13:26    [2517625]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54381
для начала версию скажи
3 апр 06, 13:39    [2517716]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116123
ten
dmidek
Для всех ли строк таблицы c ATASENDR.NR есть ATASENDNR в таблице ATAPOSITION ?

Да это абсолютно без разницы, если нет строки, то получим 0.
select count(*) from dual where 1=2;
  COUNT(*)
----------
         0

А вот и нет. Это 2 надо еще получить.

Адекватным примером будет вот что

update scott.dept d
set loc = (select distinct 'TEST' from scott.emp where deptno = d.deptno) 
/
select * from scott.dept
/
10	ACCOUNTING	TEST
20	RESEARCH	TEST
30	SALES	             TEST
40	OPERATIONS	

Видите какая неприятность произошла ?
Бостон куда то делся :-)
( Это пока не имеет прямого отношения к рассматриваемой задаче).
3 апр 06, 13:43    [2517740]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
dmidek
[src oracle]update scott.dept d
set loc = (select distinct 'TEST' from scott.emp where deptno = d.deptno)

distinct убери
3 апр 06, 13:47    [2517769]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Тьфу, блин, конечно убрать DISTINCT, а заменить на count
твой пример в аналогии к вопросу должен быть такой:
update scott.dept d
set loc = (select count('TEST') from scott.emp where deptno = d.deptno)
3 апр 06, 13:49    [2517778]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116123
ten
Тьфу, блин, конечно убрать DISTINCT, а заменить на count
твой пример в аналогии к вопросу должен быть такой:
update scott.dept d
set loc = (select count('TEST') from scott.emp where deptno = d.deptno)

ОК, пардон, это у меня была концептуальная ошибка. Большое спасибо за
разъяснение...
Ну теперь послушаем автора :-)
3 апр 06, 13:56    [2517816]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Oracle8i SQL Reference
Release 3 (8.1.7)
Part Number A85397-01

COUNT never returns null
3 апр 06, 13:56    [2517818]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
andreymx
для начала версию скажи


9.2.0.0.4
3 апр 06, 16:01    [2518615]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
ORAngutang

это если его из программы выполнять,
через BDE?
Аргумент у ora-600 какой первый?
3 апр 06, 16:12    [2518710]     Ответить | Цитировать Сообщить модератору
 Re: столь невинный Update даёт ORA-600:  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
Журавлев Денис
ORAngutang

это если его из программы выполнять,
через BDE?
Аргумент у ora-600 какой первый?


через ODAC

ORA-00600: [4512], [], [], [], [], [], [], []
4 апр 06, 10:56    [2520662]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить