powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01422 когда строка таблицы уникальна
17 сообщений из 17, страница 1 из 1
ORA-01422 когда строка таблицы уникальна
    #32892214
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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

Есть таблица в которой имеются два поля и их пара уникальна (ограничение 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
ORA-01422 когда строка таблицы уникальна
    #32892351
Калина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что вернет просто Select
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #32892421
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Калинаа что вернет просто 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
ORA-01422 когда строка таблицы уникальна
    #32892507
Jajahama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теоретически такое возможно, если установлена проверка ограничений целостности в конце транзакции

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

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

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

Код: 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
ORA-01422 когда строка таблицы уникальна
    #36371754
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amglad
Код: plaintext
1.
         AND p.date2 > stamp
В девелопере выполняется нормально, возвращает одну запись.
При выполнении из АРМа - вылетает такая ошибка.RTFM Understanding Capture , Avoiding Capture (FAQ)
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #36413129
zer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zer
Гость
Вы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #36413169
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerВы решили эту проблему?
А то у меня та же ерунда, причем на primary key и даже без джоина. Возвращает тупо два одинаковых значения primary key.Приведите:
1. Описание таблицы
2. Команду SELECT
3. результат выполнения п.2
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #36413173
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. Версия Oracle
5. Операционная система сервера
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #36413183
zer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zer
Гость
господа, сорри, пятница... Все получилось. Ошибка была в процедуре
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-01422 когда строка таблицы уникальна
    #37653042
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;


Такие простые ошибки тоже стоит учитывать.
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #37653167
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Период между сообщениями больше года.
ORA-01422 когда строка таблицы уникальна
    #39434302
IBlasterus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vektorsmУ меня такая ошибка произошла, когда я имя входной переменной назвал так же, как и поле в табличке.
Спасибо! Твой ответ мне помог разобраться в моей проблеме. :)
...
Рейтинг: 0 / 0
ORA-01422 когда строка таблицы уникальна
    #39546104
xuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xuk
Гость
Спасибо, тоже долго голову ломал, пока этот пост не увидел
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01422 когда строка таблицы уникальна
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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