powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Dynamic Stored Procedures
18 сообщений из 18, страница 1 из 1
Dynamic Stored Procedures
    #38716775
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Пытаюсь перейти с SQL Server на FireBird. Никак не могу разобраться, как работают DSP, потратил уйму времени, чтобы найти хоть что-то по моей теме, но так ничего и не нашел, хотя наверное этот вопрос уже возникал 1000 раз.
Вот например простейшая ХП:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or alter procedure FBSP2
returns (
    PREFIX char(4))
as
begin
  FOR
     select PREFIX from MTABLE
     INTO :PREFIX
   DO
   BEGIN
     SUSPEND;
   END
end


Как мне сделать так, чтобы работала примерно такая ДХП?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or alter procedure FBSP2
returns (
    PREFIX char(4))
as
declare variable SQLSTR varchar(200);
begin
sqlstr = 'select PREFIX from MTABLE INTO :PREFIX';
  FOR
     sqlStr
   DO
   BEGIN
     SUSPEND;
   END
end


Заранее спасибо...
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716779
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

Попутал 2 понятия. Саму SP и формирование запроса динамически внутри твоей ХП. Для второго варианта будет так:

Код: plsql
1.
2.
3.
FOR EXECUTE STATEMENT :SQL_TEXT 
INTO :VARIABLE1,....:VARIABLEnnn
DO SUSPEND;
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716780
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Т.е. твой пример будет выглядеть так:
Код: plsql
1.
2.
3.
4.
SQLTEXT='select PREFIX from MTABLE';
FOR EXECUTE STATEMENT SQLTEXT 
      INTO :PREFIX 
DO SUSPEND
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716781
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noramНикак не могу разобраться, как работают DSP
Тебе (для начала) будет лучше считать, что они вообще никак не работают.

Какую задачу ты пытаешься решить этим говнокодом?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716784
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
Большое спасибо!
То, что доктор прописал.
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716785
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
//Тебе (для начала) будет лучше считать, что они вообще никак не работают.//
Это еще почему?
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716786
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noramЭто еще почему?
Неразумное использование ES приводит к
а) Тормозам
б) SQL injection
в) говнокоду

Поэтому если ты решил взять на себя обычный для чайников религиозный обет "использовать в
коде приложения только запросы EXECUTE PROCEDURE и никогда даже не прикасаться к
SELECT/INSERT/UPDATE/DELETE", то лучше откажись от этой религии сразу, пока геморрой не
вырос на всю голову.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716794
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovПоэтому если ты решил взять на себя обычный для чайников религиозный обет "использовать в
коде приложения только запросы EXECUTE PROCEDURE и никогда даже не прикасаться к
SELECT/INSERT/UPDATE/DELETE", то лучше откажись от этой религии сразу, пока геморрой не
вырос на всю голову.
Я только знакомлюсь с FireBird и никаких религиозных обетов брать не собираюсь. Но мне многое непонятно, главное - почему так мало документации по FireBird, как на английском, так и на русском. Из того, что я читал про свободные бд (например FB или PostgreSQL), многие приводят как большой минус FB осутсвие внятной документации. Рад был прочесть на этом форуме, что добрые люди начали проект по документации FB. Если дадите мне ссылку, где можно будет почитать про динамические ХП, а также правила хорошей практики, буду благодарен. И вообще, раз уж разговор об этом, насколько оправдано применение ХП в FB и можно ли обходится без них. Мой front end - Delphi XE5.
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716796
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел в виду, конечно, динамичсеких ХП....
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716799
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noramНо мне многое непонятно, главное - почему так мало документации по FireBird,
как на английском, так и на русском.
Сколько это по-твоему "мало"? Сколько из этого "мало" ты уже прочитал? Language Reference
ты уже прочитал? А Language Reference Update for version 2.5? Материалы с
http://www.ibase.ru/develop.htm ты прочитал все? Или хотя бы из раздела "для чайников"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716800
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noramЯ только знакомлюсь с FireBird
Тогда зачем ты сразу полез в Dynamic SQL (который есть экзотика и не рекомендуется к
использованию в любой СУБД) и в хранимые процедуры вообще? Тебе действительно для какой-то
задачи не хватило обычного SQL?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716801
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

никаких динамических ХП в Firebird нет. Есть выполнение динамических запросов в рамках PSQL (оператор EXECUTE STATEMENT). Ещё есть анонимные PSQL блоки (EXECUTE BLOCK).

Практически всё есть reference-manuals и release-notes Разжёванное есть на Документация и статьи
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716804
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТогда зачем ты сразу полез в Dynamic SQL (который есть экзотика и не рекомендуется к
использованию в любой СУБД) и в хранимые процедуры вообще? Тебе действительно для какой-то
задачи не хватило обычного SQL?..
Хотел бы, чтобы хватало...
Как например решить такую задачу?
Код: plsql
1.
from mtable where cowner in (:Val1,:Val2..Valn)


Я заранее не знаю, сколько будет этих Val., может 3, а может пять... Как выкрутиться в этой ситуации?
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716805
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисникаких динамических ХП в Firebird нет. Есть выполнение динамических запросов в рамках PSQL (оператор EXECUTE STATEMENT)
Наверное потому я и не смог ничего найти. Почитал про EXECUTE STATEMENT, информации много - да, применять эту эксекьюшку советуют только в крайнем случае.
Я ничего не утверждаю, я только спрашиваю совета. Значит, если я правильно понял, лучше написать 1000 ХП на все случаи жизни, чем несколько динамических?
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716806
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noramКак выкрутиться в этой ситуации?
Сложить все значения во временную таблицу ("хоть миллион, хоть миллиард" (с)), а потом
join с ней. ХП и динамический SQL тут не нужны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716807
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noram,

1. Заталкивать Val1, Val2, ... ValN в GTT и делать с ней JOIN по полю фильтрации
2. Создать ХП SPLIT, которая бы принимала на вход строку состоящую из значений склеенных разделителем, а на выходе были бы разделённые значения и делать JOIN с этой ХП.

На форуме этот вопрос обсасывался 100500 раз.
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716808
noram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду разбираться...
...
Рейтинг: 0 / 0
Dynamic Stored Procedures
    #38716926
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТогда зачем ты сразу полез в Dynamic SQL (который есть экзотика и не рекомендуется к
использованию в любой СУБД) и в хранимые процедуры вообще?


Эх, дать тебе волю - ХП отмерли б на корню, не говоря об execute statement ;) Ну ищет человек аналог sp_executesql (так кажись в MS это зовется). Он-то задачу не озвучил - пусть себе ищет, может оно ему действительно надо.

P.S. У меня на текущий момент обратная задача - перевод функционала системы на FB на рельсы MSSQL. Тот еще цирк.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Dynamic Stored Procedures
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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