powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF функция с SQL запросом
25 сообщений из 38, страница 1 из 2
UDF функция с SQL запросом
    #39628412
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Доброго дня коллеги!

Подскажите, можно ли (и как, желательно с примером на Delphi) внутри UDF функции для Firebird 2.5 выполнить запрос (например, посчитать количество записей в таблице для заданного идентификатора) и вернуть результат?
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628414
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select func1(cnt) from (select count(*) cnt from sometable)
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628419
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Вопрос не в том, как написать SQL для подсчета записей, а как во внешней функции В ПРИНЦИПЕ выполнять запросы к БД и возвращать результат…
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628424
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.04.2018 14:41, zya пишет:
> как во внешней функции В ПРИНЦИПЕ выполнять запросы к БД и возвращать результат…

а за на хуа?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628435
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya,

не ищи себе геморрой на ровном месте. В UDF это сделать нельзя без дополнительного внутреннего коннекта и старта транзакции. В UDR можно, но это уже в 3.0
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628436
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya,

Сделать-то можно.... НО у тебя есть PSQL + execute statement - зачем городить огород? Или ты думаешь, что SQL запрос из UDF будет выполнен быстрее, чем тот же SQL из PSQL?
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628438
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya, подключиться из UDF к серверу на адрес 127.0.0.1 и выполнить запрос в другой транзакции. Иными словами, если в незавершенной транзакции, вызвавшей функцию UDF будут какие-либо изменения записей, то функция UDF этого не увидит, выполнив запрос к серверу по другому соединению и в другой транзакции этого не увидит.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628440
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zyaВопрос не в том, как написать SQL для подсчета записей, а как во внешней функции В ПРИНЦИПЕ выполнять запросы к БД и возвращать результат…Такая "внешняя функция" давно написана - см. EXECUTE STATEMENT
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628456
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Вот этого я и опасался, что надо поднимать сессию, транзакцию что не есть гут...

А какая может быть альтернатива для решения следующей задачи. Есть структура предприятия в виде дерева, например (id, id_root, sign). Необходимо для каждой строчки получить признак принадлежности подразделения к заданному идентификатору родителя.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628459
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya, так и что мешает? Незнание FirebirdSQL Reference Manual ? Читай мантру про CTE.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628494
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zyaА какая может быть альтернатива для решения следующей задачиа) включить мозг
б) выучить SQL
в) написать запрос

Без (а) не советую даже начинать
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628495
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya,

зачем это делать в UDF?
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628518
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zyaВот этого я и опасался, что надо поднимать сессию, транзакцию что не есть гут...
нет волшебного способа на другом сервере выполнить запрос без коннекта, старта транзакции, и т.д.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628524
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvzyaВот этого я и опасался, что надо поднимать сессию, транзакцию что не есть гут...
нет волшебного способа на другом сервере выполнить запрос без коннекта, старта транзакции, и т.д.

Есть! Телепатический! И местные обитатели тому подтверждение
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628532
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
DarkMasterzya,

Сделать-то можно.... НО у тебя есть PSQL + execute statement - зачем городить огород? Или ты думаешь, что SQL запрос из UDF будет выполнен быстрее, чем тот же SQL из PSQL?


Получилось нечто вроде

Код: sql
1.
2.
3.
4.
5.
6.
select
(select * from test(t.id)),
t.*
from accounting_point t
where
(select * from test(t.id))=1004



но вот эта часть

Код: sql
1.
 (select * from test(t.id))



смориться как то не аккуратно... А можно эту конструкцию заменить на более "изящную"?
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628538
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zyaПолучилось нечто вроде

Код: sql
1.
2.
3.
4.
5.
6.
select
(select * from test(t.id)),
t.*
from accounting_point t
where
(select * from test(t.id))=1004



но вот эта часть

Код: sql
1.
 (select * from test(t.id))



смориться как то не аккуратно... А можно эту конструкцию заменить на более "изящную"?Это что еще за бред? Иди и читай про объединение кортежей записей (INNER JOIN/LEFT JOIN/RIGHT JOIN и т.д.)!!! Приходи, когда освоишь JOIN'ы и освоишь 3NF .
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628542
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya,

использование звёздочки в подзапросе это просто цирк какой-то, ты что не знаешь как у тебя там возвращаемое поле называется?
предположим это N, тогда


Код: sql
1.
2.
3.
4.
5.
6.
select
  p.n,
  t.*
from accounting_point t
left join test(t.id) p on 1=1
where p.n=1004
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628545
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Да блин, при чем тут join. Задача предельно простая - выполнить функцию - если результат функции = параметру - вернуть результат. В оракле я бы сделал это так. В PL/SQL написал бы функцию TEST и вызвал бы ее:

Код: sql
1.
2.
3.
4.
5.
6.
select
test(t.id),
t.*
from accounting_point t
where
test(t.id)=1004



в Firebird 2.5 нет такой возможности. Используя PSQL + execute statement можно сделать подобное только таким образом:

Код: sql
1.
2.
3.
4.
5.
6.
select
(select * from test(t.id)),
t.*
from accounting_point t
where
(select * from test(t.id))=1004



Отсюда и вопрос как вызвать процедуру не используя select * from test(t.id), а как в Оракле
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628548
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Симонов Денисzya,

использование звёздочки в подзапросе это просто цирк какой-то, ты что не знаешь как у тебя там возвращаемое поле называется?
предположим это N, тогда


Код: sql
1.
2.
3.
4.
5.
6.
select
  p.n,
  t.*
from accounting_point t
left join test(t.id) p on 1=1
where p.n=1004



Понял. спасибо.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628551
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Симонов Денисzya,
использование звёздочки в подзапросе это просто цирк

Сейчас стадия отладки запроса. В продуктиве такого нет. Это просто пример.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628554
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya,

в Firebird 3.0 ты можешь написать PSQL функцию, а в 2.5 только ХП. Но, если ты обращаешься не к другой БД, то я подозреваю, что твою задачу и вовсе можно решить простым SQL запросом без всяких ХП
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628567
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zya, что делает ХП test?
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628570
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
Симонов Денисzya,

в Firebird 3.0 ты можешь написать PSQL функцию, а в 2.5 только ХП. Но, если ты обращаешься не к другой БД, то я подозреваю, что твою задачу и вовсе можно решить простым SQL запросом без всяких ХП

Может быть, может быть... Пока будет такое решение...

Всем спасибо.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628573
zya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zya
Гость
rdb_devzya, что делает ХП test?
В общем случае внутри функции будет выполняться запрос по идентификатору, а в частности будет показывать входит ли деталь с указанным идентификатором в заданную спецификацию.
...
Рейтинг: 0 / 0
UDF функция с SQL запросом
    #39628576
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты мыслишь процедурными парадигмами.
перестраивайся на декларативные.
чти азбуку SQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF функция с SQL запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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