Основанная на сессии глобальная переменная в хранимой процедуре Postgresql?

Нет проблем с кодом. Но, поскольку карта параметров хранит объект как значение, вам может потребоваться приводить значение обратно к его типу каждый раз, когда вы получаете его с карты (каждый ключ хранит значение, тип которого отличается.).

        Map<String, Object> params = new HashMap<>();
        params.put("sl", new String[]{"AZN"});
        params.put("dType", "trade");
// year - the year minus 1900
// month - 0 to 11
        params.put("startDate", new Date(2018-1900, 11, 20));
        params.put("endDate", new Date(2018-1900, 11, 20));
        params.put("tZ", "Eur");
        params.put("ac", "equity");
        params.put("af", new Object[]{"=", "price", 6031} );

        for(Object obj:(Object[]) params.get("af")) {
            System.out.println(obj);
        }

        for(String obj:(String[]) params.get("sl")) {
            System.out.println(obj);
        }
9
задан dacracot 5 January 2009 в 21:09
поделиться

5 ответов

Вы могли определить некоторые пользовательские переменные классы в своем postgresql.conf и использовать его в качестве переменных соединения в Вашей хранимой процедуре. См. документы.

Пример использования для пользовательского переменного класса "imos":

imos=> set imos.testvar to 'foobar';
SET
Time: 0.379 ms
imos=> show imos.testvar;
 imos.testvar
--------------
 foobar
(1 row)

Time: 0.333 ms
imos=> set imos.testvar to 'bazbar';
SET
Time: 0.144 ms
imos=> show imos.testvar;
 imos.testvar
--------------
 bazbar
(1 row)

В хранимых процедурах можно использовать встроенную функцию current_setting ('imos.testvar').

6
ответ дан 4 December 2019 в 13:05
поделиться

PostgreSQL не поддерживает глобальный (сессия) переменные, но необходимо использовать некоторые приемы

http://www.pgsql.cz/index.php/PostgreSQL_SQL_Tricks_II#Any_other_session_variables http://www.postgresql.org/docs/8.3/static/plperl-global.html

отношения Pavel Stehule

3
ответ дан 4 December 2019 в 13:05
поделиться

С Postgresql форумов ...

Итак, пара вопросов .. ..

  1. Можете ли вы объявить глобальные значения из plpgsql?
  2. Если так, есть ли способ избежать загрязнения пространства имен? (возможно, эквивалентно использованию Oracle пакета plsql переменные)

plpgsql не имеет глобальных переменных.

1
ответ дан 4 December 2019 в 13:05
поделиться

К сожалению, в PL / pgSQL нет глобальных переменных, хотя вы можете найти их на других языках PL, которые поставляются с PostgreSQL, в частности, в PL / Perl , PL / Python и PL / Tcl

1
ответ дан 4 December 2019 в 13:05
поделиться

Другой вариант - создать временную таблицу и использовать ее для хранения всех ваших временных переменных

CREATE TEMPORARY TABLE tmp_vars( 
    name varchar(64),
    value varchar(64),
    PRIMARY KEY (name)
);

Вы даже можете создать хранимую процедуру для управления всем, создавая таблицу, если это не так. еще не существует. Один для извлечения и один для хранения.

4
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: