powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужна помощь в написании запроса (партировать от T-SQL)
16 сообщений из 16, страница 1 из 1
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095960
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, пожалуйста, не имею опыта написания запросов в IB/FB

То есть я могу написать запрос на T-SQL, но он семантически отличается от IB/FB

никак не могу понять как запрос нужно интерпретировать.

Имею запрос на T-SQL

Код: sql
1.
2.
3.
4.
5.
declare @d int = 15
declare @a int
select @a = amount from MyTable where discount = @d

select * from HerTable where amount = @a



иными словами, у меня есть переменная, значение которой я задаю визуально. Далее от этой переменной идут подзапросы с вложениями и с использованием полученных переменных в подзапросах.

Что-то я совсем не могу ладу дать. Вроде должно быть похоже, однако в IB/FB совсем иначе объявляются переменные, иначе они применяются из запроса в переменную, и ... что-то я запутался с begin/end

Спасибо за помощь огромное
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095966
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имею FB версии 2,5... если я правильно понимаю по ..firebird250\fbclient.dll
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095971
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
select HerTable.* from  HerTable join MyTable on HerTable.amount = 
MyTable.amount where MyTable.discount = ?


Прочая мелкомягкая чушь не нужна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095972
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Я привел примитивный запрос в качестве примера

В реалии он имеет 18 запросов, которые каскадно получают значение и спускаются дальше.

Каждый запрос имеет от 3 до 12 таблиц в джоинах.

В общем там все не просто. нагромождать в один - была мысль, но я от нее отказался.
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095975
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

Вот так, "накапливать" в скрипте, ФБ не умеет, у него нет "скриптовых переменных". Параметры в запросы можно передавать только в каком-то приложении - Дельфи, .net, C#, C++, perl, php, и так далее.
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095977
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

RTFM
EXECUTE BLOCK
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095978
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
В реалии он имеет 18 запросов, которые каскадно получают значение и спускаются дальше.
И все они выдают результат наружу ?
Если да, то это не к FB - FB не работает с батчами и возвращает один resultset с заранее определённой стр-рой.
Если же resultset один, то либо execute block, либо таки один монстр-запрос с использованием CTE.
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095981
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
Dimitry Sibiryakov,

Я привел примитивный запрос в качестве примера

В реалии он имеет 18 запросов, которые каскадно получают значение и спускаются дальше.

Каждый запрос имеет от 3 до 12 таблиц в джоинах.

В общем там все не просто. нагромождать в один - была мысль, но я от нее отказался.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
execute block
(ANAME varchar(31) = :ANAME)
returns
(AFIELD_NAME  varchar(31))
as
declare RELATION_ID bigint;
begin
 for select r.RDB$RELATION_ID from RDB$RELATIONS r
     where r.RDB$RELATION_NAME = :ANAME
     into :RELATION_ID
     do begin
          RELATION_ID = RELATION_ID + 1; -- пригодиццо?

          for select f.RDB$FIELD_NAME from  RDB$RELATION_FIELDS f
              where f.RDB$RELATION_NAME = :ANAME
              into AFIELD_NAME
                   do suspend;
        end

end
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40095982
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
Dimitry Sibiryakov,

Я привел примитивный запрос в качестве примера

В реалии он имеет 18 запросов, которые каскадно получают значение и спускаются дальше.

Каждый запрос имеет от 3 до 12 таблиц в джоинах.

В общем там все не просто. нагромождать в один - была мысль, но я от нее отказался.


Правильней нагромождать. Но если религия не позволяет, то:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare variable d integer;
declare variable a integer;

begin

  d = 15 ;
  select amount from MyTable where discount = :d
  into a ;
  for select * from HerTable where amount = :a
  into ... 
  do
  begin
    suspend 
  end;

end


Как-то так. Список переменных надо самому написать (во втором селекте надо делать присвоения локальным переменным значения полей из таблиц). Ну и переменные хранимки надо правильно объявить (входные, выходные).
Реально это не очень удобно. Лучше нагромождать.
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096008
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть разница между "скрипт" и "хранимая процедура", не надо их мешать в кучу - получится каша.

Двоичник
должно быть похоже
так и есть
Двоичник
совсем иначе объявляются переменные
убрать "собаку" и поставить в конце ";" это совсем иначе?
Двоичник
применяются из запроса в переменную
кляуза into и вперед
Двоичник
запутался с begin/end
количество эндов должно соответствовать бегинам. :) ибэксперт вполне подсвечивает парные бегин/энды.

Таки разница есть, резалтсет процедуры, как выше уже говорилось, только один, зато его можно джойноть.

Программист потребуется, автозаменой не перегонишь из скрипта M$SQL в хранимую процедуру FB.
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096009
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Что-то у меня не получается с последним запросом, где должно выдать результат выборки селективной, на основании полученного параметра из каскадов запросов ранее

ругается то на do , то на ;

Признаюсь, мне совсем не ясна конструкция:
do
begin
suspend
end;

Спасибо
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096013
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
langref читал?
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096016
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит настало время почитать-таки Lаnguage Reference из прикреплённых тем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096037
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

во-первых, почитай про suspend. Во-вторых, можно начать с малого. Вот пример, который у меня работает. Поставь только свою таблицу вместо моей.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
execute block
returns (i integer)
as
begin

  for select a.id_spr
  from sprav a
  where a.priz_spr=7
  into :i
  do
  begin
    suspend ;
  end
end
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096067
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Код: sql
1.
2.
3.
declare @d int = 15
declare @a int
select @a = amount from MyTable where discount = @d



select * from HerTable where amount = @a


последним шагом делается выборка из таблицы, где фильтр устанавливается на параметр.

Спасибо за отзывчивость
...
Рейтинг: 0 / 0
Нужна помощь в написании запроса (партировать от T-SQL)
    #40096095
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДвоичникПризнаюсь, мне совсем не ясна конструкция:
читайте
http://www.ibase.ru/sp_call/
часть про "селективные процедуры". В execute block то же самое. Execute block - это аналог, так сказать, НЕхранимая процедура.
http://www.ibase.ru/files/firebird/langref25rus/index.html#dml-execblock
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужна помощь в написании запроса (партировать от T-SQL)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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