powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Dependence (зависимости) и execute statement
25 сообщений из 30, страница 1 из 2
Dependence (зависимости) и execute statement
    #38653262
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток,
FB 2.5
при использовании execute statement теряются зависимости для таблиц и полей учавствующих в этой execute statement (напр. IB Expert в Dependence конкретной таблицы уже не покажет процедуру с этой таблицей если запрос спрятан в execute statement).
Как выкручиваться в подобной ситуации? возможно кто то уже отработал методику создания такой зависимости искуственно или зависимость можно указать в ручную?
Хочется и execute statement и не потерять зависимости.

Спасибо
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653271
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoКак выкручиваться в подобной ситуации?
Не использовать execute statement.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653272
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

то что теряются зависимости в execute statement это нормально ибо он на вход принимает строку. Ты можешь там вообще запрос динамически сформировать.

Mikhail Tchervonenkoвозможно кто то уже отработал методику создания такой зависимости искуственно или зависимость можно указать в ручную?

думаю ты первый с таким вопросом
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653274
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,
хочется порядка в базе
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653276
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

отказаться от execute statement не всегда возможно
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653300
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoотказаться от execute statement не всегда возможно
В случаях когда его зависимости известны - всегда. Приведи пример когда это невозможно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653348
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

обычный процедура с запросом условие сортировки которого заранее не известно, слишком много комбинаций что бы обойтись без execute statement. Можно конечно сортировать локально (Delphi XE2 + IBDAC 4.6.15) но тогда надо грузить все данные на клиент что медленно и не приемлемо (сейчас подргузка происходит порциями по мере необходимости).
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653359
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

динамическое формирование кода, и execute statement в том числе - всегда зло. И зависимости тут никак не отследить. ФБ не будет парсить содержимое ES на этапе компиляции процедуры, триггера или EB с этим ES. Внутри может быть вообще неисполняемая фигня написана.

читай в самом конце, Caveats with EXECUTE STATEMENT
http://www.firebirdsql.org/refdocs/langrefupd25-psql-execstat.html

там написано практически все, что тебе уже тут ответили.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653364
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoобычный процедура с запросом условие сортировки которого
заранее не известно, слишком много комбинаций что бы обойтись без execute statement
Но можно обойтись без процедуры. Или сортировать её result set.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653369
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

то что там написано я уже читал, как и то что тут сказали мне известно. Вопрос состоял в том как не ухудшая производительность подобную зависимость добавить в процедуру не отказываясь от execute statement. Это может быть просто запрос с участием той же таблицы который ничего не возвращает или нечто подобное что создаст зависимость.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653395
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoВопрос состоял в том как не ухудшая производительность подобную зависимость добавить в процедуру не отказываясь от execute statement. Это может быть просто запрос с участием той же таблицы который ничего не возвращает или нечто подобное что создаст зависимость.
с ничего не возвращающим запросом проблема, нет таких, результат придется куда-то запихивать, пусть он и не нужен.
А так - да, а какие еще варианты? Ну какие? :-)

- dependencies создаются при компиляции DDL
- руками запихивать зависимости в системные таблицы нехорошо, да и результат неизвестен.
- ES "распарсить" может только разработчик.
- можно воткнуть в процедуру "имитацию зависимостей" для ES. но ее будет контролировать разработчик, глазами.

как бы, и все.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653431
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

добавь такой гавнокод себе в процедуру будут тебе зависимости

Код: sql
1.
2.
3.
4.
5.
6.
7.
IF (1=0) THEN
BEGIN
  -- тута некая псевдодеятельность с твоими таблицами
  IF (EXISTS(SELECT * FROM T1, T2, T3)) THEN
  BEGIN
  END
END
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653451
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПриведи пример когда это невозможно.

Сортировка в зависимости от условия.
Условие в Where в зависимости от условия.
В Delphi довольно часто приходится генерить sql частично динамически, с формированием нужного условия в Where.
В sql я бы это написал как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE (StartDate DATE, EndDate DATE, OrderByDate BOOLEAN) RETURNS (Id INTEGER)
AS
  DECLARE Q QueryBuilder;
begin
  Q = select D.Id from Docs D where D.Processed;
  if (StartDate is not null) then
    Q.[and (D.DocDate >= :StartDate)];
  if (EndDate is not null) then
    Q.[and (D.DocDate <= :EndDate)];
  if (OrderByDate) then
    Q.[order by D.DocDate];

  for OpenQuery(Q) into :Id do
    suspend;
end
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653464
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

фигнёй страдаешь

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE P(OrderFieldName VARCHAR(31)) RETURNS (f1 int, f2 int, f3 int)
AS
BEGIN
  FOR SELECT f1, f2, f3
        FROM T
        ORDER BY CASE :OrderFieldName
                         WHEN 'f1' THEN f1
                         WHEN 'f2' THEN f2
                         WHEN 'f3' THEN f3
                       END
        INTO :f1, :f2, :f3
   DO SUSPEND;
END
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653471
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А теперь то же самое, но для динамического Where :)
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653484
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

да пожалуйста


Код: sql
1.
2.
3.
4.
5.
select D.Id 
from Docs D
where (D.DocDate >= :StartDate or :StartDate is null) and
         (D.DocDate <= :EndDate or :EndDate is null)
         
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653494
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

все бы хорошо только сортировка не по одному полю а по нескольким и порядок тоже имеет значение и соотв может меняться.
Я ж говорю, количество комбинаций слишком велико для статического запроса.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653499
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

универсальный решатель задач? Или попытка воткнуть все запросы в ХП, там где это не надо
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653515
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

да нет, как всегда, исходя из пожеланий клиентов добавлялась функциональность которая стандартными средствами не возможна.
А ля натыкать по колонкам EhDBGrid сортировку, дабы происходило все на сервере и не простым запросом а через хранимую процедуру (т.к. ввиду дурацкой структуры базы простым запросом этот грид не наполнить). Все в принципе работает и довольно быстро, но с зависимостями порядка нет.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653527
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoСимонов Денис,

да нет, как всегда, исходя из пожеланий клиентов добавлялась функциональность которая стандартными средствами не возможна.
А ля натыкать по колонкам EhDBGrid сортировку , дабы происходило все на сервере и не простым запросом а через хранимую процедуру (т.к. ввиду дурацкой структуры базы простым запросом этот грид не наполнить). Все в принципе работает и довольно быстро, но с зависимостями порядка нет.
Ну возможно поможет сортировка результата работы процедуры
ну типа
Код: sql
1.
  slect .... from XP(.....)  order by ........
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653535
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mMikhail TchervonenkoСимонов Денис,

да нет, как всегда, исходя из пожеланий клиентов добавлялась функциональность которая стандартными средствами не возможна.
А ля натыкать по колонкам EhDBGrid сортировку , дабы происходило все на сервере и не простым запросом а через хранимую процедуру (т.к. ввиду дурацкой структуры базы простым запросом этот грид не наполнить). Все в принципе работает и довольно быстро, но с зависимостями порядка нет.
Ну возможно поможет сортировка результата работы процедуры
ну типа
Код: sql
1.
  slect .... from XP(.....)  order by ........


мысль хорошая,
но там ещё и фильтрация кроме сортировки, а такой запрос будет медленным ввиду отсутствия индекса
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653537
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkom7mпропущено...

Ну возможно поможет сортировка результата работы процедуры
ну типа
Код: sql
1.
  slect .... from XP(.....)  order by ........


мысль хорошая,
но там ещё и фильтрация кроме сортировки, а такой запрос будет медленным ввиду отсутствия индекса
ну так фильтрацию оставь в процедуре
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653538
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

вместо ХП используй EXECUTE BLOCK и формируй его содержимое на клиенте
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653639
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисNickDee,

да пожалуйста


Код: sql
1.
2.
3.
4.
select D.Id 
from Docs D
where (D.DocDate >= :StartDate or :StartDate is null) and
         (D.DocDate <= :EndDate or :EndDate is null)

Plan(Docs NATURAL)
Ну и условия могут быть нетривиальные.

В максимуме хотелось бы такого, для гибкости:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE GetStatistic(UserId INTEGER) RETURNS (StartDate DATE, EndDate DATE, ProcessedCount INT64, NotProcessedCount INT64)
AS
  declare Q SelectQuery;
begin
  Q = [select count(*) from Docs where DocDate between :StartDate and :EndDate];
  if (:UserId is not null) then
    Q = Q.[and where CreatedBy = :UserId];
  for select StartDate, EndDate from DateIntervals into :StartDate, :EndDate do
  begin
    open query Q.[and where Processed = True] into :ProcessedCount;
    open query Q.[and where Processed = False] into :NotProcessedCount;
    suspend;
  end;
end


И проблема с зависимостями решается, и компилируемость остаётся, и гибкость достаточная.
...
Рейтинг: 0 / 0
Dependence (зависимости) и execute statement
    #38653650
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeePlan(Docs NATURAL)
Ну и условия могут быть нетривиальные.
в тройке это не так. Там реализован "условный план"
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Dependence (зависимости) и execute statement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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