Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 950
1

Динамически получить все входящие параметры от текущей процедуры

31.01.2024, 13:15. Показов 1069. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Скажите, как от текущей процедуры динамически получить все параметры с принимающими значениями?

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE test1.myProcedure1("@parameter1" INTEGER, "@parameter2" VARCHAR(20), "@parameter3" text DEFAULT NULL)
LANGUAGE plpgsql
AS $procedure$
DECLARE
    "v_xml" xml;
BEGIN
    --Статичный способ
    "v_xml" := xmlcomment('
        <Parameters>
            <@Parameter1>' || COALESCE("@parameter1", NULL) || '</@Parameter1>
            <@Parameter2>' || COALESCE("@parameter2", 'null') || '</@Parameter2>
            <@Parameter3>' || COALESCE("@parameter3", 'null') || '</@Parameter3>
        </Parameters>
    '); 
    raise notice '%', "v_xml"; 
END;
$procedure$;
 
CALL test1.myProcedure1(1, 'Текст2');
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2024, 13:15
Ответы с готовыми решениями:

Как получить имя текущей процедуры или функции?
Всем доброго времени суток. Прошерстив просторы интернета не нашел каким образом можно получить...

Получить все согласные, входящие только в одно слово и все согласные, входящие более чем в одно слово
заданная последовательность слов. слова разделенные запятыми после последнего слова точка. получить...

Получить в PHP OUTPUT параметры из процедуры MS SQL
Не получилось нигде найти пример получения кодом PHP OUTPUT параметров из процедуры MS SQL В MS...

Как получить параметры хранимой процедуры сервер firebird
Всем, привет! В IBExpert создал на сервере вот такую хранимую процедуру SET TERM ^ ; create or...

Напечатать по алфавиту все звонкие согласные буквы, входящие во все нечётные слова и не входящие в чётные
Множества. Дан текст на русском языке. Напечатать в алфавитном порядке все звонкие согласные буквы,...

6
707 / 245 / 51
Регистрация: 01.06.2023
Сообщений: 693
31.01.2024, 14:39 2
Можно получить имена, но не значения. Эта задача неразрешима.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 950
31.01.2024, 14:44  [ТС] 3
Если можно получить имена, то теоретически же можно же получить значения, но только через динамический запрос.
0
707 / 245 / 51
Регистрация: 01.06.2023
Сообщений: 693
31.01.2024, 14:52 4
Нет, при выполнении динамического запроса нет доступа к переменным, если они не указаны в части using.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 950
31.01.2024, 17:13  [ТС] 5
Цитата Сообщение от Swa111 Посмотреть сообщение
Нет, при выполнении динамического запроса нет доступа к переменным, если они не указаны в части using.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE test1.myProcedure1("@parameter1" INTEGER, "@parameter2" INTEGER)
LANGUAGE plpgsql
AS $procedure$
DECLARE   
   "sql" text;
BEGIN
    "sql" := '
    drop table if exists tempTable;
    create temporary table tempTable as (
        select $1 as "value"
    );';
        
    EXECUTE "sql" USING "@parameter1"END;
$procedure$;
 
CALL test1.myProcedure1(1,2);
 
SELECT * FROM tempTable;

После using придется конкретно указывать параметры. Это не динамично.
0
707 / 245 / 51
Регистрация: 01.06.2023
Сообщений: 693
31.01.2024, 22:40 6
Можете подумать в сторону динамического формирования куска функции. Например внутри функции ставите маркер к примеру
SQL
1
/*CollectParam:"v_xml"*/
Дальше пишете процедуру, которая пройдется по всем функциям и процедурам и заменит /*CollectParam:"v_xml"*/ на сборку параметров в переменную "v_xml", после этого устанавливаете новую версию функции

Либо пишете утилиту, которая по сигнатуре функции сформирует выражения для сбора значений параметров. И вставляете полученное выражение во время создания функции (ручками)
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 950
01.02.2024, 16:02  [ТС] 7
Такой вариант получения значений аргументов текущей процедуры.

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE PROCEDURE test1.myProcedure1("@parameter1" INTEGER, "@parameter2" VARCHAR(20), "@parameter3" text DEFAULT NULL)
LANGUAGE plpgsql
AS $procedure$
DECLARE   
    "v_arguments" text;
BEGIN
    "v_arguments" := current_query();
    "v_arguments" := SUBSTRING("v_arguments" FROM '\((.*?)\)'); --Вытаскиваем значения из скобки
 
    raise notice '%', "v_arguments";
END;
$procedure$;
 
CALL test1.myProcedure1(1,'Текст 2'); --Возвращает "1,'Текст 2'"
CALL test1.myProcedure1(1,'Текст 2', NULL); --Возвращает "1,'Текст 2', null"
CALL test1.myProcedure1(1,'Текст 2', NULL::text); --Возвращает "1,'Текст 2', null::text"


Добавлено через 5 часов 17 минут
Если процедуру test1.myProcedure1 поместить в другую процедуру
SQL
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE test1.mainProcedure()
LANGUAGE plpgsql
AS $procedure$
BEGIN
    CALL test1.myProcedure1(1,'Текст 2', NULL);
END;
$procedure$;
 
CALL test1.mainProcedure();
то значения аргументов не определит.
0
01.02.2024, 16:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2024, 16:02
Помогаю со студенческими работами здесь

Всегда ли нужно задавать все параметры процедуры IintGraph?
Всегда ли необходимо явно задавать все параметры процедуры INITGRAPH ?

Нужно узнать все имеющиеся процедуры и их параметры в базе
Здравствуйте. Есть ли в ado.net способ автоматически получить параметр процедуры в виде...

Получить в файле g все нечетные числа, входящие в файл f
Дан файл f, компоненты которого являются целыми числами. Получить в файле g все нечетные числа,...

Получить в файле g все нечетные числа, входящие в файл f
Вот условие: Дан файл f, компоненты которого являются целыми числами. Получить в файле g все...

Получить в массиве G все числа кратные 5, входящие в массив F
Дан массив F, компоненты которого являются вещественными числами. Получить в массиве G все числа...

Получить все элементы входящие в последовательность по одному разу
Добрый день! Помогите пожалуйста с задачей. Нужна только блок-схема к каждому пункту. Дана...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru