powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / компилятор IBExpert ругаеться на OR
22 сообщений из 22, страница 1 из 1
компилятор IBExpert ругаеться на OR
    #37703798
Здраствуйте
при компиляции тригерра компилятор IBExpert-a ругаеться на сравнение,а именно на OR
если розделить на несколько IF-ов ,то компиляция проходит успешно,если нет-ругань
вот текст триггера

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER TRIGGER CREATE_UNICAL_ID FOR CLIENT_DATA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable last_id integer;
begin
last_id =  (select max(client_data.unical_id) from client_data);
if (last_id is null)  then
new.unical_id = 1;
if  (last_id = 0) then
new.unical_id = 1;
if (last_id is not  null)    then
new.unical_id = last_id + 1;
if (last_id <> 0) then
new.unical_id = last_id + 1;


end
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703801
в чём может быть ошибка?
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703805
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) в тексте триггера не наблюдается OR
2) скорее всего экономите на скобках.
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703809
arni,
не тот текс кинул
вот нормальный

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE trigger create_un_id for client_data
active before insert position 0
AS
declare variable last_unical_id integer;
begin
last_unical_id = (select max(client_data.unical_id) from client_data);
if (last_unical_id is null) or (last_unical_id = 0)  then
new.unical_id = 1;
if (last_unical_id is not null) or (last_unical_id <> 0 )  then
new.unical_id = last_unical_id + 1;
  /* Trigger text */
end
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703810
использую вместо генератора :)
только ругать не надо
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703813
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский> использую вместо генератора :) только ругать не надо

Конечно, не надо. Надо сразу руки отрывать.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703815
Гаджимурадов Рустам,
использовал генератор для первичного ключа,при испитаниях (добавил пару,удалил,поттвердил транзакцию)
вместо 1,2,3 появлялось скажем 1,2,5,что не есть хорошо
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703818
а тут проверяеться максимальное,и новое генерируеться как следующее после максимального
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703826
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский,
компилятор как бэ намекает, что одного if then else будет достаточно. Без всяких OR.
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703829
а может он намекает на то,эт только предположение, что в первых скобках проверяеться на предмет пустого значения,а во вторых-на предмет определённого значения,типо проверки из разных групп?
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703836
пробовал переделать

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE trigger gen_unical_id for client_data
active before insert position 0
AS
declare variable last_un_id integer;
begin
last_un_id = (select max(unical_id) from client_data );
if (last_un_id = 0 ) then
new.unical_id = 1
else
new.unical_id = last_un_id + 1;




ругаеться теперь на Else
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703845
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
AS
declare variable last_un_id integer;
begin
last_un_id = (select max(client_data.unical_id) from client_data );
if (last_un_id = 0 ) then
new.unical_id = 1;
if (last_un_id <> 0) then
new.unical_id = last_un_id + 1;
  /* Trigger text */
end



работает безотказно
но всё таки,почему компилятор ругаеться на сложные условия?
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703848
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский,
Код: plsql
1.
2.
3.
4.
if ( last_un_id is null ) then
  new.unical_id = 1; -- точку-с-запятой потеряли
else
  new.unical_id = last_un_id + 1;
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703855
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский,

про первый тест-кейс уже сказал - обрамляйте ВЕСЬ предикат в скобки - таково требование синтаксиса условного оператора;
про второй: оператор после THEN обязан оканчиваться точкой-с-запятой вне зависимости от наличия или отсутствия ветки ELSE.
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703877
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть, многопользовательская работа с базой не предполагается?
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703878
спасибо,понял
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703896
DelphiCoder_1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот почему ты идёшь столь кривым путём? Генератор в Firebird - средство, проверенное временем, и его использование - идеальный вариант, лучше даже без триггера.
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703922
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский> вместо 1,2,3 появлялось скажем 1,2,5,что не есть хорошо

Ты же не думаешь, что я щас тебя буду убеждать
в том, что уже сотни раз обсуждалось? :)

P.S. Каждый имеет право пройти весь путь по
граблям самостоятельно, не спорю.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703955
значения из таблицы удалялись,а генератор то не откатывался :)
хотя можно было сделать чтобы при удалении делался откат значения
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703964
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Збудовский> значения из таблицы удалялись,а генератор то не откатывался :)

А зачем?

Владимир Збудовский> хотя можно было сделать чтобы при удалении делался откат значения

Прелагаю сразу сбрасывать в ноль, чего уж мелочиться.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37703976
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир, ты прочитал статью?
http://www.ibase.ru/devinfo/generator.htm

кроме того, даже если генератор только 4-байтовый, это означает, что если получать от него новое значение +1 каждую секунду, он "кончится" через 68 лет. Если 10 раз в секунду, то через 6.8 лет. А генераторы нынче 8-байтовые...
В общем, не экономь номера. Суррогатный ключ - не обязательно номер документа, это просто средство идентификации записи. Поэтому есть в нем пропуски или нет, не имеет никакого значения.
А если нужна "бездырочная" нумерация, то есть статья и об этом, правда на английском
http://www.ibobjects.com/docs/ti_AuditableSeries.ZIP
...
Рейтинг: 0 / 0
компилятор IBExpert ругаеться на OR
    #37704063
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер стопроцентный road to hell.
Читать статьи указанные в посте выше.
Закрыто, обсуждать этот "мегабоян" не вижу смысла.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / компилятор IBExpert ругаеться на OR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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