×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

5.8.4. Глобальные значения в PL/Perl

Для хранения данных (включая ссылки на код) между вызовами функций в течение текущего сеанса может быть использован глобальный хеш %_SHARED to store data, including code references, between function calls for the lifetime of the current session.

Ниже приведен простой пример использования общих данных:

CREATE OR REPLACE FUNCTION set_var(name text, val text) RETURNS text AS $$
    if ($_SHARED{$_[0]} = $_[1]) {
        return 'ok';
    } else {
        return "cannot set shared variable $_[0] to $_[1]";
    }
$$ LANGUAGE plperl;

CREATE OR REPLACE FUNCTION get_var(name text) RETURNS text AS $$
    return $_SHARED{$_[0]};
$$ LANGUAGE plperl;

SELECT set_var('sample', 'Hello, PL/Perl!  How''s tricks?');
SELECT get_var('sample');

Ниже приведен более сложный пример с использованием ссылки на код:

CREATE OR REPLACE FUNCTION myfuncs() RETURNS void AS $$
    $_SHARED{myquote} = sub {
        my $arg = shift;
        $arg =~ s/(['\\])/\\$1/g;
        return "'$arg'";
    };
$$ LANGUAGE plperl;

SELECT myfuncs(); /* initializes the function */

/* Set up a function that uses the quote function */

CREATE OR REPLACE FUNCTION use_quote(TEXT) RETURNS text AS $$
    my $text_to_quote = shift;
    my $qfunc = $_SHARED{myquote};
    return &$qfunc($text_to_quote);
$$ LANGUAGE plperl;

(Приведенный выше код можно было бы заменить одной строкой return $_SHARED{myquote}->($_[0]); в ущерб читаемости.)

Из соображений безопасности PL/Perl выполняет функции, вызываемые от имени любой конкретной SQL-роли, в отдельном интерпретаторе Perl для этой роли. Это предотвращает случайное или злонамеренное вмешательство одного пользователя в работу функций PL/Perl другого пользователя. Каждый такой интерпретатор имеет собственное значение %_SHARED переменной и другое глобальное состояние. Таким образом, две функции PL/Perl будут использовать одно и то же значение %_SHARED тогда и только тогда, когда они выполняются от имени одной и той же SQL-роли. В приложении, в котором в рамках одного сеанса код выполняется от имени нескольких SQL-ролей (с помощью SECURITY DEFINER функций, использования команды SET ROLEи т. д.) может потребоваться принять дополнительные меры для обеспечения возможности совместного использования данных функциями PL/Perl через %_SHARED. Для этого необходимо убедиться, что функции, которые должны взаимодействовать, принадлежат одному и тому же пользователю, и пометить их SECURITY DEFINER. Разумеется, следует соблюдать осторожность, чтобы такие функции не могли быть использованы для совершения каких-либо непреднамеренных действий.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению