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

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

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

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

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

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

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

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

5.7.4. Глобальные данные в PL/Tcl

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

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

Все функции PL/TclU, используемые в сеансе, выполняются в одном и том же интерпретаторе Tcl, который, само собой, отделен от интерпретаторов, используемых для функций PL/Tcl. Таким образом, глобальные данные автоматически становятся общими для функций на языке PL/TclU. Это не считается угрозой безопасности, так как все функции PL/TclU выполняются с одним и тем же уровнем доверия, а именно с правами суперпользователя базы данных.

Чтобы защитить функции PL/Tcl от непреднамеренного взаимного влияния, каждой функции через upvar команду предоставляется глобальный массив. Глобальным именем этой переменной является внутреннее имя функции, а локальным — GD. Рекомендуется использовать массив GD GD использоваться для хранения постоянных частных данных функции. Используйте обычные глобальные переменные Tcl только для тех значений, которые вы специально планируете сделать общими для нескольких функций. (Обратите внимание, что GD массивы являются глобальными только в пределах конкретного интерпретатора, поэтому они не позволяют обойти указанные выше ограничения безопасности.)

Пример использования GD приводится в spi_execp примере ниже.

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

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