Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01422 когда строка таблицы уникальна / 17 сообщений из 17, страница 1 из 1
31.01.2005, 13:12
    #32892214
SOMNAMBULA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Добрый день!

Бьюсь с такой проблемой:

Есть таблица в которой имеются два поля и их пара уникальна (ограничение unique(field1, field2). Оба эти поля не могут быть NULL.

запрос типа

Код: plaintext
1.
select ... into ...
from some_table where (field1 = :f1) and (field2 = :f2)

возвращает ошибку:

Код: plaintext
ORA-01422: exact fetch returns more than requested number of rows

БД Oracle 9.2.0.3
...
Рейтинг: 0 / 0
31.01.2005, 13:46
    #32892351
Калина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
а что вернет просто Select
...
Рейтинг: 0 / 0
31.01.2005, 14:09
    #32892421
SOMNAMBULA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Калинаа что вернет просто Select

Просто селект возвращает одну запись (строку).
Вышеуказанный селект у меня в хранимой процедуре:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
procedure aProc(f1 in number, f2 in number)...
...
begin
...
select t.a, t.b, t.c into a, b, c
from some_table t where (t.field1 = f1) and (t.field2 = f2);
...
end;

Но разве это имеет значение?
...
Рейтинг: 0 / 0
31.01.2005, 14:32
    #32892507
Jajahama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Теоретически такое возможно, если установлена проверка ограничений целостности в конце транзакции

SET CONSTRAINT имя DEFERRED

и в текущей транзакции до вызова процедуры была вставлена запись

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create table ab (a number, b number);

alter table ab add constraint uk_ab unique (a, b) deferrable;

create or replace procedure p_ab(p_a number, p_b number) is
  l_a number;
  l_b number;
begin
  select a, b into l_a, l_b from ab where a=p_a and b=p_b;
end;

insert into ab values( 1 , 2 );
commit;

set constraint uk_ab deferred;

insert into ab values( 1 , 2 );

begin
  p_ab( 1 , 2 );
end;

...
Рейтинг: 0 / 0
31.01.2005, 17:09
    #32892995
vizio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
или же
Код: plaintext
alter table t enable novalidate constraint ...
...
Рейтинг: 0 / 0
31.01.2005, 17:14
    #32893018
hellpwin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
У меня в формс был похожий глюк, просто я скомпилировал и сохранил библиотеку (подключенную к форме) заново.
...
Рейтинг: 0 / 0
01.02.2005, 11:31
    #32894089
Proteus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Код: plaintext
1.
select ... into ...
from some_table where (field1 = :f1) and (field2 = :f2)

вообще то данный запрос вернет одну строку только в том случае если заполнены и field1 и field2 и переданы оба параметра :f1 и :f2. В противном случае выборка будет пустая.

может запрос несколько другой? ;)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.12.2009, 14:43
    #36371628
amglad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Блин, такая же хрень наблюдается необъяснимая.
Есть запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
SELECT p.date1, p.date2
         INTO cur_fd, cur_td      
         FROM receipt r, TABLE(r.parts) p, tarif_plan_det td
         WHERE r.tarif_plan_det_id = td.tarif_plan_det_id
         AND p.date1 <= stamp
         AND p.date2 > stamp
         AND r.pay_status_id =  2 
         AND r.card_id = new_receipt.card_id
         AND td.base_trips >  0 
         AND NOT EXISTS(SELECT  1  FROM receipt_del rd 
                        WHERE rd.receipt_id = r.receipt_id)

В девелопере выполняется нормально, возвращает одну запись.
При выполнении из АРМа - вылетает такая ошибка.

dberr=DBD::Oracle::st execute failed: ORA-01422: exact fetch returns more than requested num

Ставишь rownum = 1 - работает
...
Рейтинг: 0 / 0
17.12.2009, 15:10
    #36371754
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
amglad
Код: plaintext
1.
         AND p.date2 > stamp
В девелопере выполняется нормально, возвращает одну запись.
При выполнении из АРМа - вылетает такая ошибка.RTFM Understanding Capture , Avoiding Capture (FAQ)
...
Рейтинг: 0 / 0
15.01.2010, 19:12
    #36413129
zer
zer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Вы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.
...
Рейтинг: 0 / 0
15.01.2010, 19:52
    #36413169
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
zerВы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.Приведите:
1. Описание таблицы
2. Команду SELECT
3. результат выполнения п.2
...
Рейтинг: 0 / 0
15.01.2010, 19:53
    #36413173
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
4. Версия Oracle
5. Операционная система сервера
...
Рейтинг: 0 / 0
15.01.2010, 20:03
    #36413183
zer
zer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
господа, сорри, пятница... Все получилось. Ошибка была в процедуре
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.02.2012, 09:49
    #37653042
vektorsm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
У меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке. Вроде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
declare
  field_val Varchar2(25);
  cnt        Varchar2(25)
begin
  select * from table1 t
     into cnt
  where t.field_val = field_val;
end;


Такие простые ошибки тоже стоит учитывать.
...
Рейтинг: 0 / 0
09.02.2012, 10:59
    #37653167
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
vektorsmУ меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке. Вроде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
declare
  field_val Varchar2(25);
  cnt        Varchar2(25)
begin
  select * from table1 t
     into cnt
  where t.field_val = field_val;
end;


Такие простые ошибки тоже стоит учитывать.пример ошибочного запроса уже есть в начале темы "31 янв 05 , 13:12". Зачем еще один приводить?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.04.2017, 16:06
    #39434302
IBlasterus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
vektorsmУ меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке.
Спасибо! Твой ответ мне помог разобраться в моей проблеме. :)
...
Рейтинг: 0 / 0
01.11.2017, 15:18
    #39546104
xuk
xuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORA-01422 когда строка таблицы уникальна
Спасибо, тоже долго голову ломал, пока этот пост не увидел
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01422 когда строка таблицы уникальна / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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