powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Проблема с условным оператором IF в FB2.0 (IBExpert)
25 сообщений из 35, страница 1 из 2
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35097663
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, не могу понять, в чем проблема.
Делаю примерно следующий запрос в IBExpert-редакторе к БД (FB2.0)

Код: plaintext
1.
2.
IF ( 1 = 1 )
  THEN insert into new_table (field1,field2) values ('value1','value2');
  ELSE insert into new_table (field1,field2) values ('value3','value4');

На что получаю следующее:

Код: plaintext
1.
2.
3.
4.
Invalid token.
Dynamic SQL Error.
SQL error code = - 104 .
Token unknown - line  1 , column  1 .
IF.

В документациях написано следующее:

Код: plaintext
1.
2.
3.
4.
5.
IF
Оператор IF..ELSE в СУБД Firebird имеет ту же семантику, что и в СУБД MS SQL, однако синтакс СУБД Firebird требует наличия ключевого слова THEN после условия. 

IF (something = 'unknown')
  THEN something = 'uuhhh.....';
  ELSE something = 'I know! I know!'; 

Уже достаточно давно работаю с этой БД, глюк впервые.
Подскажите пожалуйста, в чем проблема.
Заранее спасибо.
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35097687
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IF применим только в PSQL блоках: SP или EB.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35097702
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в триггерах
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35097986
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин... я прошу прощения, но ничего не понял... :(

поставлю вопрос по-другому:
я могу как-нибудь вставить условную проверку в запрос на подобии этого к FB2.0?

Код: plaintext
1.
2.
3.
4.
5.
6.
AnsiString Query =
"select Field1 from new_table where Field2 = '0001'";
  IBDataSet1->Close();
  IBDataSet1->SelectSQL->Clear();
  IBDataSet1->SelectSQL->Add(Query);
  IBDataSet1->Open();

То есть, я могу вообще сделать проверку условия непосредственно в запросе?
IF, WHEN... не проходят.
Сорри, если чего не понял
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35097999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгонос
То есть, я могу вообще сделать проверку условия непосредственно в запросе?

Да, в запросах для этого есть WHERE. Ты бросай свои "наподобии", говори
конкретно какую проблему пытаешься наскрести.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098000
SAMZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копай CASE, мне кажется это тебе поможет
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098040
Bulygin Roman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На выбор.

Код: plaintext
1.
2.
3.
4.
insert into new_table (field1,field2) 
values (IIF(:Something= 1 ,  100  ,  200 ),
        IIF(:Something= 1 , 'value2' , 'value4'))


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert into new_table (field1,field2) 
values (CASE :Something WHEN  1  THEN  100 
                        WHEN  2  THEN  133 
                        WHEN  7  THEN  160 
                        ELSE  199  END,
        CASE :Something WHEN  1  THEN 'о-хо-хо'
                        WHEN  2  THEN 'о-го-го!'
                        WHEN  7  THEN 'э-ге-гей!!'
                        ELSE 'нафик' END)

Хотя, конечно, проктология
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098045
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует БД FB2.0, с которой контактирует моя программа.
На вход моей программы приходит набор строк, которые нужно распихать по таблице по такому правилу:
1) Если три первых первых столбца строки совпадают со столбцами некой строкой в БД, то эт строку нужно заменить новой.
2) Если такой комбинации полей не существует, новую строку нужно вставить в таблицу на новое место.

вопрос: Как это сделать?
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098061
Bulygin Roman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и так далее, этаж за этажом...
Код: plaintext
1.
2.
3.
insert into new_table (field1,field2)
values (COALESCE(NULLIF(CAST(:Something AS INTEGER),  1 )|| 100  ,  200 ),
        COALESCE(NULLIF(CAST(:Something AS INTEGER),  1 )||'value2' , 'value4'))
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098075
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгоносвопрос: Как это сделать?

EXECUTE BLOCK + вдумчивое чтение http://www.ibase.ru/devinfo/testiu.htm
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098098
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасиб!!! буду разбираться :)
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098125
Bulygin Roman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДолгоносСуществует БД FB2.0, с которой контактирует моя программа.
На вход моей программы приходит набор строк, которые нужно распихать по таблице по такому правилу:
1) Если три первых первых столбца строки совпадают со столбцами некой строкой в БД, то эт строку нужно заменить новой.
2) Если такой комбинации полей не существует, новую строку нужно вставить в таблицу на новое место.

вопрос: Как это сделать?

1. Создать CREATE VIEW COPY_VIEW(SomeStr), у которой один единственный столбец аналогичен столбцам некой строке БД.
2. Написать этой вьюшке триггер на INSERT, в котором:
2.1. Проверить, существует ли комбинация полей, эквивалентная NEW.SomeStr
2.2. и если не существует, то распарсить строку и распихать всё по столбцам и/или таблицам
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Field1 = SUBSTRING(NEW.SomeStr FROM  1  FOR  5 ); -- Первые пять символов
Field2 = SUBSTRING(NEW.SomeStr FROM  6  FOR  15 ); -- ещё 15
Field3 = SUBSTRING(NEW.SomeStr FROM  21 ); -- всё, что осталось
IF (NOT EXISTS(SELECT * 
                 FROM OTHER_TABLE 
                WHERE Field1 =:Field1 
                  AND Field2 =:Field2 
                  AND Field3 =:Field3) ) THEN
    INSERT INTO OTHER_TABLE(Field1, Field2, Field3)
    VALUES(:Field1, :Field2, :Field3);
3. Сделать
Код: plaintext
1.
2.
INSERT TO COPY_VIEW(SomeStr) 
SELECT SomeStr 
  FROM SOME_TABLE
4. PROFIT!!!
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35098241
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bulygin RomanИ тебе стоит ту же статью перечитать. ИМХО.
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35099818
Bulygin Roman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery Bulygin RomanИ тебе стоит ту же статью перечитать. ИМХО.
Я не достаточно хорошо уверен в своих знаниях относительно курсоров, чтобы их применять. Впрочем, вы мне дали хороший пинок под зад, чтобы изучить эту область. Спасибо.
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35100484
UPPER_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bulygin Roman WildSery Bulygin RomanИ тебе стоит ту же статью перечитать. ИМХО.
Я не достаточно хорошо уверен в своих знаниях относительно курсоров, чтобы их применять. Впрочем, вы мне дали хороший пинок под зад, чтобы изучить эту область. Спасибо.

где почитать про курсоры и их применение в FB 2.0?
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35100544
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPPER> где почитать про курсоры и их применение в FB 2.0?

В релизнотах, как обычно.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35100764
UPPER_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в книге Хелен Борри описано про использование курсоров?
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35100813
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPPER_а в книге Хелен Борри описано про использование курсоров?

Курсоры типа FOR SELECT..AS..DO у нее скорее всего описаны.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35101631
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPPER> а в книге Хелен Борри описано про использование курсоров?

Курсоры (declare cursor) - нет.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35102377
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена.
Статья помогла постолько поскольку...
Это круто, конечно - быстродействие рулит итд итп.
На всякий случай для себя (в будущем поможет возможно при поиске, или кому-нить, для кого случайные аббревиатуры типа "EB" ничего не значат)
просто кусок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
EXECUTE BLOCK
        AS
        BEGIN
        IF (exists (select * from new_table where
            column1 = '1' and
            column2 = '2' and
            column3 = '3'
        ))
  THEN update new_table set
  column1 = 'a',
  column2 = 'b',
  column3 = 'c',
  column4 = 'd'
        where
            column1 = '1' and
            column2 = '2' and
            column3 = '3'
  else 
  insert into new_table (column1,column2,column3,column4) values ('e','f','g','h');

        END

PS: Я новичек, но в следующий раз обязательно буду делать к сообщению пометку "простите, но я даун"
PPS: да, тот код, который я запостил - это именно тот код, который мне был нужен для решения моей проблемы.
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35103569
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгонос> просто кусок кода:

Не самый лучший по содержанию и ужасно оформленный кусок.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35104086
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгоносаббревиатуры типа "EB"оффтоп:
кстати, раз SP переводится как ХП,
то как будет переводиться EB?
ВБ?
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35104131
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.> оффтоп:
> кстати, раз SP переводится как ХП,
> то как будет переводиться EB?
> ВБ?

Нет, либо ЕБ, либо ИБ. А лучше никак не переводить и оставить EB (на латинском).


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35105598
Долгонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
Не самый лучший по содержанию и ужасно оформленный кусок.

Знаю :)
я - плохой мальчик!
старался, старался - оформлял, понимаешь ли, рисовал заоблачные картины, но пришел Пикассо и упс... все не так, малыш...

Если серьезно, то тема оформления - вопрос, который меня давно тревожит. Маэстро, плз, если не затруднит, запостите мой кусок кода так, как Вы видите его "хорошо оформленным"
Может поучусь, может поспорю :)
...
Рейтинг: 0 / 0
Проблема с условным оператором IF в FB2.0 (IBExpert)
    #35105629
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДолгоносЕсли серьезно, то тема оформления - вопрос, который меня давно тревожит.
Маэстро, плз, если не затруднит, запостите мой кусок кода так, как Вы видите
его "хорошо оформленным" Может поучусь, может поспорю :)Сколько слов... Ну держите.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
EXECUTE BLOCK
AS --выравнивание
declare variable id integer;
BEGIN
    id = - 1 ;
    select First  1 
        id -- за * надо расстреливать
    from new_table
    where
        column1 = '1'
        and column2 = '2' -- непринципиально, главное, чтобы одинаково
        and column3 = '3'
    into :id;
    if ( id <> - 1  ) then
        update new_table set -- запрос странный
            column1 = 'a',
            column2 = 'b',
            column3 = 'c',
            column4 = 'd' -- точно-точно?
        where
            column1 = '1'
            and column2 = '2'
            and column3 = '3'
    else
        insert into new_table (column1,column2,column3,column4)
        values ('e','f','g','h');
END
По оформлению - приводить все к upper/lower не стал, лень.
По содержанию - некоторые вещи непонятны, например,
может быть там лучше update, хотя при правильных данных
select first 1 into должно хватить.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Проблема с условным оператором IF в FB2.0 (IBExpert)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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