powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / case
10 сообщений из 10, страница 1 из 1
case
    #32652072
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в FB-1.5 есть возможность использовать case как это происходит в языках высокого уровня ?

Alex_M
...
Рейтинг: 0 / 0
case
    #32652098
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеется в виду что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
switch
       {
       case:
             {
              ......
             }
        default:
             {
              .......
             }
       }

Alex_M
...
Рейтинг: 0 / 0
case
    #32652117
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть стр.244 EmbedSQL.pdf
...
Рейтинг: 0 / 0
case
    #32652127
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь не понял сначала, в ХП вроде нет, в запросах есть.
...
Рейтинг: 0 / 0
case
    #32652175
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то я не въехал.
Синтаксис case описан в Release notes.
В принципе его можно вот таким макаром использовать :
Код: plaintext
1.
2.
3.
4.
5.
i = case j 
  when  1  then  10 
  when  2  then  20 
  else  0 
  end;
begin end сюда не включишь, но вполне можно вызов процедур вот таким макаром:
Код: plaintext
1.
2.
3.
4.
5.
6.
select case :j 
  when  1  then (select result from proc1)
  when  2  then (select result from proc2)
  else        (select result from proc3)
  end 
from rdb$database into :i;
...
Рейтинг: 0 / 0
case
    #32652233
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Век живи, век учись..
...
Рейтинг: 0 / 0
case
    #32652261
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лентяй пасиб
зы
ты мой куммир



Alex_M
...
Рейтинг: 0 / 0
case
    #32652489
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76Век живи, век учись..
Alex777Лентяй пасиб
зы
ты мой куммир
В одной из библейских заповедей сказано "Не сотвори себе кумира":)

Вообще это от лени все: лень печатать лишние знаки, лень потом разбираться в своей программе, когда чего нибудь переделывать надо...
Ну и раз пошла такая пьянка, вот еще "фишки" из той же серии :

Вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
Declare Variable Cnt Integer;
...
Select Count(*) from from Tbl where Id = :InpId Into :Cnt;
if (Cnt >  0 ) then begin
  ...
end
Вполне можно написать:
Код: plaintext
1.
2.
3.
if (Exists (Select Id from Tbl where Id = :InpId)) then begin
  ...
end


вместо кучи строк при присвоении переменных (когда default не катит) :
Код: plaintext
1.
2.
3.
4.
5.
6.
if (i =  0 ) then begin
  var1 =  0 ;
  var2 = '-';
  var3 = Cuttent_Date;
  ...
end;
Обычно пишу:
Код: plaintext
1.
2.
3.
if (i =  0 ) then  
  Select  0 , '-', Current_Date, ... From Rdb$Database 
  Into :Var1, :Var2, :Var3 ...;


вместо такой конструкции
Код: plaintext
1.
2.
3.
4.
if (StartDat is Null) then
  StartDat =  Cast('1900-01-01' as date);
if (EndDat is Null) then
  EndDat =  Current_Date;
Обычно пишу:
Код: plaintext
1.
2.
StartDat = Coalesce(StartDat, Cast('1900-01-01' as date);
EndDat = Coalesce(EndDat, Current_Date); 
Можно и в один оператор:
Код: plaintext
1.
2.
Select Coalesce(StartDat, Cast('1900-01-01' as date)), Coalesce(EndDat, Current_Date) 
From Rdb$Database Into :StartDat, EndDat;
Но тут уже встает вопрос понятности исходного кода.

А вот из той же серии для Delphi:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function Iif(Const Expr : Boolean; Const ValT, ValF : Integer) : Integer; Overload;
begin	if Expr then Result := ValT else Result := ValF; end;
Function Iif(Const Expr : Boolean; Const ValT, ValF : String) : String; Overload;
begin	if Expr then Result := ValT else Result := ValF; end;
Function Iif(Const Expr : Boolean; Const ValT, ValF : DateTime) : DateTime; Overload;
begin	if Expr then Result := ValT else Result := ValF; end;
...
...

Ну и вместо, скажем:

Код: plaintext
1.
2.
3.
4.
5.
6.
...
if (LikeValue[ 1 ] = '%') then
  WhereExpr := WhereExpr + 'Like '
else
  WhereExpr := WhereExpr + 'Starting Whith ';
...
Можно написать:
Код: plaintext
1.
WhereExpr := WhereExpr + Iif(LikeValue[ 1 ] = '%', 'Like ', 'Starting Whith ');

Вообщем лень - двигатель прогресса :)
...
Рейтинг: 0 / 0
case
    #32652860
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, все перехожу в лентяи
...
Рейтинг: 0 / 0
case
    #32653902
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лентяй еще раз спасибо
просто я SQL почти не знаю
недавно с ним знаком

Теперь я кое-что поменяю в своем проекте по твоему образу и подобию
;))

Alex_M
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / case
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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