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

Откуда:
Сообщений: 50
Oracle Version 3.2.20.09
наверное, это больше теоритический вопрос
есть процедура
procedure add_record(t_type_id in number, t_tax IN NUMBER) IS
BEGIN
IF t_type_id = 9 THEN
    e_tax:=t_tax;
ELSE
    e_tax:=0;
END IF;

insert into ni_act_records(id,tax)
    values(t_type_id,e_tax);

end add_record;


которая добавляет записи в базу. если t_type_id = 9, то e_tax=переданному значению. Если t_type_id= любое другое число, то e_tax=0.
каким-то образом в базе оказалась запись
id=34 и tax=7
на 60 000 записей оказалась одна такая ошибочная. чем она может быть вызвана, если значения tax проверяются условием?
13 май 13, 16:16    [14288488]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
123йй
Member

Откуда:
Сообщений: 1638
Saules,
Наверное, больше реторический ответ
автор
Oracle Version 3.2.20.09

Где достали такое ?
автор
procedure add_record

процедура не валидная.
13 май 13, 16:27    [14288591]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
stax..
Guest
Saules,

кто-то умеет без процедуры
1) insert into ni_act_records(id,tax) values(34,7);
2) update ...
3) триггерок навесить с :new.tax:=7;

.....
stax
13 май 13, 16:47    [14288757]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
Saules,

Сделали инсерт без вашей процедуры?
13 май 13, 18:00    [14289159]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Lecter
Saules,

Сделали инсерт без вашей процедуры?

да здравствует чек констрейнт.
13 май 13, 21:02    [14289596]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Saules
Member

Откуда:
Сообщений: 50
stax.., Lecter
в обход процедуры пользователь никак не мог сделать - доступа к бд нет. через аппликацию вводит данные и сохраняет их.

123йй
если процедура не валидная, то количество неверных записей должно быть намного больше?
14 май 13, 10:33    [14290938]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Saules
в обход процедуры пользователь никак не мог сделать - доступа к бд нет. через аппликацию вводит данные и сохраняет их.

Иногда у приложений есть не совсем очевидные возможности, например у Oracle Forms :)

Saules
если процедура не валидная...

procedure add_record(t_type_id in number, t_tax IN NUMBER) IS
BEGIN
IF t_type_id = 9 THEN
    e_tax:=t_tax;
ELSE
    e_tax:=0;
END IF;

insert into ni_act_records(id,tax)
    values(t_type_id,e_tax);

end add_record;
14 май 13, 10:40    [14290979]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
K790
Member

Откуда:
Сообщений: 634
Saules,

логгирование изменений таблицы есть ?
14 май 13, 10:41    [14290982]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Saules
Member

Откуда:
Сообщений: 50
ten
procedure add_record(t_type_id in number, t_tax IN NUMBER) IS
BEGIN
IF t_type_id = 9 THEN
    e_tax:=t_tax;
ELSE
    e_tax:=0;
END IF;

insert into ni_act_records(id,tax)
    values(t_type_id,e_tax);

end add_record;

не понял, что Вы имели ввиду :-( на мой ламерский взгляд e_tax или ноль(если t_type_id <> 9) или равен t_tax (если t_type_id = 9)


K790
только что запись была добавлена в таблицу такого-то числа
14 май 13, 11:01    [14291148]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Saules,
e_tax не объявлена.
14 май 13, 11:02    [14291162]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
K790
Member

Откуда:
Сообщений: 634
Saules,

и что Вам эта запись логгирования дает ? Вы однозначно можете сказать, что вставка произошла именно этой процедурой ?
14 май 13, 11:13    [14291255]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
Разве не надо объявить e_tax?
14 май 13, 11:17    [14291288]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Saules
Member

Откуда:
Сообщений: 50
ten
Saules,
e_tax не объявлена.


e_tax NUMBER;

она объявлена, просто сократил всю процедуру, чтобы не вставлять кучу лишнего кода

K790
Saules,
и что Вам эта запись логгирования дает ? Вы однозначно можете сказать, что вставка произошла именно этой процедурой ?

а это единственная процедура, которая добавляет данные в эту таблицу
так что у меня есть только один вариант объяснения - глюк. но хотелось бы предотвратить повторное появление таких глюков.
14 май 13, 11:19    [14291301]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
Эникей
Member

Откуда:
Сообщений: 3
Saules
она объявлена, просто сократил всю процедуру, чтобы не вставлять кучу лишнего кода
а больше вы ничего "лишнего" не сократили?
"чудес не бывает"
14 май 13, 11:20    [14291309]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
K790
Member

Откуда:
Сообщений: 634
Saules
сократил всю процедуру, чтобы не вставлять кучу лишнего кода


обычно в таких сокращениях и могут проявляться ошибки.
14 май 13, 11:23    [14291332]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
123йй
Member

Откуда:
Сообщений: 1638
Saules,
автор
просто сократил всю процедуру

тогда сокащайте до такого
procedure add_record(t_type_id in number, t_tax IN NUMBER) IS
BEGIN
  null;
end add_record;

и ошибок не будет
14 май 13, 11:38    [14291445]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Saules,
Да и вообще, все-таки нужно нормально версию Oracle озвучить. Ибо в Oracle 3 PL/SQL не было. Ну и объяснить, к чему относятся циферки "Oracle Version 3.2.20.09".
14 май 13, 11:50    [14291549]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
-2-
Member

Откуда:
Сообщений: 15330
ten
к чему относятся циферки "Oracle Version 3.2.20.09".
OSD
14 май 13, 12:12    [14291787]     Ответить | Цитировать Сообщить модератору
 Re: не сработала проверка в процедуре  [new]
--+
Guest
ten,
наверное, третий формс
14 май 13, 13:19    [14292311]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить