|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые форумчане. В MS SQL SERVER можно сделать такой финт, например, в некоторой таблице содержатся имена хранимых процедур. Все хранимые процедуры имеют одну и ту же сигнатуру (т.е. количество и типы аргументов одинаковые у всех). Если в строковую переменную получить имя этой процедуры, тогда можно запустить процедуру, указав имя переменной. Код: sql 1. 2. 3. 4. 5.
Как можно сделать аналогичный трюк в plpgSQL (PostgreSQL 14) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 08:53 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Сотрудник Главного Управления Здравствуйте, уважаемые форумчане. В MS SQL SERVER можно сделать такой финт, например, в некоторой таблице содержатся имена хранимых процедур. Все хранимые процедуры имеют одну и ту же сигнатуру (т.е. количество и типы аргументов одинаковые у всех). Если в строковую переменную получить имя этой процедуры, тогда можно запустить процедуру, указав имя переменной. Код: sql 1. 2. 3. 4. 5.
Как можно сделать аналогичный трюк в plpgSQL (PostgreSQL 14) ? через выполнение динамических команд https://www.postgresql.org/docs/12/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN PS: что то многовато последнее время вопросом про как mssql код на постгрес переводить. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 09:21 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Maxim Boguk, извините, я не совсем понял, по ссылке, указанной вами, примеры, как с помощью EXECUTE выполнить различные команды типа SELECT, INSERT, UPDATE но мне нужны не эти команды, а именно запуск существующих хранимых процедур. И, если можно, покажите пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 09:41 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Сотрудник Главного Управления Maxim Boguk, извините, я не совсем понял, по ссылке, указанной вами, примеры, как с помощью EXECUTE выполнить различные команды типа SELECT, INSERT, UPDATE но мне нужны не эти команды, а именно запуск существующих хранимых процедур. И, если можно, покажите пример. А как по вашему хранимые процедуры запускаются по синтаксису? И что вам мешает через EXECUTE вызвать хранимую процедуру? Код: sql 1.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 11:10 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 12:50 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Maxim Boguk, Вопрос немного усложняется. Во-первых: работает не так, как вы написали, а вот так: Код: plsql 1. 2.
Во-вторых: самый последний параметр процедуры - имеет модификатор INOUT. Так вот, выходное значение не попадает в arg4, хотя процедура выполняется. Как сделать так, чтобы выходное значение записывалось в arg4 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2022, 15:24 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Сотрудник Главного Управления Maxim Boguk, Вопрос немного усложняется. Во-первых: работает не так, как вы написали, а вот так: Код: plsql 1. 2.
Во-вторых: самый последний параметр процедуры - имеет модификатор INOUT. Так вот, выходное значение не попадает в arg4, хотя процедура выполняется. Как сделать так, чтобы выходное значение записывалось в arg4 ? call это для процедуры perform для функции поскольку 90% pl/pgsql кода он на функциях (процедуры - для очень особых случаев и только с 12 версии) - я привёл пример который обычно работает. про inout в сочетании с динамическими вызовами - я бы попробовал следующим образом (важно - я НЕ ПРОВЕРЯЛ идея на вскидку выглядит рабочей): Код: sql 1.
Если не работает - тогда интересно будет... -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2022, 18:34 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Maxim Boguk Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 07:22 |
|
Запуск процедуры через переменную
|
|||
---|---|---|---|
#18+
Сотрудник Главного Управления, Если на выход только одина параметр, то наверное должно сработать так Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2022, 08:59 |
|
|
start [/forum/topic.php?fid=53&tid=1993719]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
22ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 109ms |
0 / 0 |