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

Откуда:
Сообщений: 158
Добрый день!

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

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

запрос типа

select ... into ...
from some_table where (field1 = :f1) and (field2 = :f2)

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

ORA-01422: exact fetch returns more than requested number of rows

БД Oracle 9.2.0.3
31 янв 05, 13:12    [1286962]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
Калина
Member

Откуда: Moskau
Сообщений: 2649
а что вернет просто Select
31 янв 05, 13:46    [1287164]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
SOMNAMBULA
Member

Откуда:
Сообщений: 158
Калина
а что вернет просто Select


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

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;

Но разве это имеет значение?
31 янв 05, 14:09    [1287274]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
Jajahama
Member

Откуда: Москва
Сообщений: 247
Теоретически такое возможно, если установлена проверка ограничений целостности в конце транзакции

SET CONSTRAINT имя DEFERRED

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

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;

31 янв 05, 14:32    [1287408]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
vizio
Member

Откуда:
Сообщений: 118
или же
alter table t enable novalidate constraint ...
31 янв 05, 17:09    [1288186]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
hellpwin
Member

Откуда:
Сообщений: 177
У меня в формс был похожий глюк, просто я скомпилировал и сохранил библиотеку (подключенную к форме) заново.
31 янв 05, 17:14    [1288224]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
Proteus
Member

Откуда:
Сообщений: 1345
select ... into ...
from some_table where (field1 = :f1) and (field2 = :f2)

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

может запрос несколько другой? ;)
1 фев 05, 11:31    [1289767]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: ORA-01422 когда строка таблицы уникальна  [new]
amglad
Member

Откуда:
Сообщений: 47
Блин, такая же хрень наблюдается необъяснимая.
Есть запрос

 
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 - работает
17 дек 09, 14:43    [8080914]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28401
amglad
         AND p.date2 > stamp
В девелопере выполняется нормально, возвращает одну запись.
При выполнении из АРМа - вылетает такая ошибка.
RTFM Understanding Capture, Avoiding Capture (FAQ)
17 дек 09, 15:10    [8081200]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
zer
Member

Откуда: Москва
Сообщений: 72
Вы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.
15 янв 10, 19:12    [8193234]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 7776
zer
Вы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.
Приведите:
1. Описание таблицы
2. Команду SELECT
3. результат выполнения п.2
15 янв 10, 19:52    [8193412]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 7776
4. Версия Oracle
5. Операционная система сервера
15 янв 10, 19:53    [8193418]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
zer
Member

Откуда: Москва
Сообщений: 72
господа, сорри, пятница... Все получилось. Ошибка была в процедуре
15 янв 10, 20:03    [8193446]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: ORA-01422 когда строка таблицы уникальна  [new]
vektorsm
Member

Откуда:
Сообщений: 1
У меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке. Вроде:
declare
  field_val Varchar2(25);
  cnt        Varchar2(25)
begin
  select * from table1 t
     into cnt
  where t.field_val = field_val;
end;

Такие простые ошибки тоже стоит учитывать.
9 фев 12, 09:49    [12059461]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
-2-
Member

Откуда:
Сообщений: 13976
vektorsm
У меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке. Вроде:
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". Зачем еще один приводить?
9 фев 12, 10:59    [12059982]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: ORA-01422 когда строка таблицы уникальна  [new]
IBlasterus
Member

Откуда: Днепр
Сообщений: 16
vektorsm
У меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке.

Спасибо! Твой ответ мне помог разобраться в моей проблеме. :)
6 апр 17, 16:06    [20374107]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01422 когда строка таблицы уникальна  [new]
xuk
Member

Откуда:
Сообщений: 13
Спасибо, тоже долго голову ломал, пока этот пост не увидел
1 ноя 17, 15:18    [20919194]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить