Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Запуск процедуры через переменную  [new]
Сотрудник Главного Управления
Member

Откуда: Главное Управление
Сообщений: 115
Здравствуйте, уважаемые форумчане.

В MS SQL SERVER можно сделать такой финт, например, в некоторой таблице содержатся имена хранимых процедур.
Все хранимые процедуры имеют одну и ту же сигнатуру (т.е. количество и типы аргументов одинаковые у всех).
Если в строковую переменную получить имя этой процедуры, тогда можно запустить процедуру, указав имя переменной.

DECLARE @StoredProcedure VARCHAR(200)

SELECT @StoredProcedure = StoredProcedure FROM T_PROCEDURES WHERE IdObject = 123

EXEC @StoredProcedure @arg1, @arg2, @arg3


Как можно сделать аналогичный трюк в plpgSQL (PostgreSQL 14) ?
31 окт 21, 08:53    [22390520]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры через переменную  [new]
Maxim Boguk
Member

Откуда: По разному.
Сообщений: 5022
Сотрудник Главного Управления
Здравствуйте, уважаемые форумчане.

В MS SQL SERVER можно сделать такой финт, например, в некоторой таблице содержатся имена хранимых процедур.
Все хранимые процедуры имеют одну и ту же сигнатуру (т.е. количество и типы аргументов одинаковые у всех).
Если в строковую переменную получить имя этой процедуры, тогда можно запустить процедуру, указав имя переменной.

DECLARE @StoredProcedure VARCHAR(200)

SELECT @StoredProcedure = StoredProcedure FROM T_PROCEDURES WHERE IdObject = 123

EXEC @StoredProcedure @arg1, @arg2, @arg3


Как можно сделать аналогичный трюк в plpgSQL (PostgreSQL 14) ?


через выполнение динамических команд
https://www.postgresql.org/docs/12/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

PS: что то многовато последнее время вопросом про как mssql код на постгрес переводить.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
31 окт 21, 09:21    [22390525]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры через переменную  [new]
Сотрудник Главного Управления
Member

Откуда: Главное Управление
Сообщений: 115
Maxim Boguk,

извините, я не совсем понял,
по ссылке, указанной вами, примеры, как с помощью EXECUTE выполнить различные команды типа SELECT, INSERT, UPDATE
но мне нужны не эти команды, а именно запуск существующих хранимых процедур.
И, если можно, покажите пример.
31 окт 21, 09:41    [22390527]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры через переменную  [new]
Maxim Boguk
Member

Откуда: По разному.
Сообщений: 5022
Сотрудник Главного Управления
Maxim Boguk,

извините, я не совсем понял,
по ссылке, указанной вами, примеры, как с помощью EXECUTE выполнить различные команды типа SELECT, INSERT, UPDATE
но мне нужны не эти команды, а именно запуск существующих хранимых процедур.
И, если можно, покажите пример.


А как по вашему хранимые процедуры запускаются по синтаксису?
И что вам мешает через EXECUTE вызвать хранимую процедуру?

EXECUTE 'PERFORM '||var_stored_function_name||'($1, $2, $3)' USING (arg1, arg2, arg3);



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
31 окт 21, 11:10    [22390538]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры через переменную  [new]
Сотрудник Главного Управления
Member

Откуда: Главное Управление
Сообщений: 115
Maxim Boguk,

Спасибо!
31 окт 21, 12:50    [22390568]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить