Как определить глобальную переменную в PL/SQL в Oracle?

Вопрос: Как определить глобальную переменную в PL/SQL, которая будет доступна во всех функциях/процедурах/пакетах? Можно ли определить? Или есть альтернативный способ сделать это? Лучший ответ: Создайте новый пакет с вашей переменной в спецификации пакета, например: CREATE PACKAGE my_public_package IS my_var Number; END; Теперь вы можете получить доступ к переменной в любом коде с доступом к my_public_package

Вопрос:

Как определить глобальную переменную в PL/SQL, которая будет доступна во всех функциях/процедурах/пакетах?

Можно ли определить?

Или есть альтернативный способ сделать это?

Лучший ответ:

Создайте новый пакет с вашей переменной в спецификации пакета, например:

CREATE PACKAGE my_public_package IS my_var Number; END;

Теперь вы можете получить доступ к переменной в любом коде с доступом к my_public_package

… my_public_package.my_var := 10; … Ответ №1

Как определить глобальную переменную в PL/SQL, которая будет доступна во всех функциях/процедурах/пакетах?

Вы можете использовать глобальную переменную контекста приложения.

Контекст приложения представляет собой набор пар имя-значение, которые Oracle База данных хранится в памяти. Контекст приложения имеет ярлык, называемый пространство имен, например empno_ctx для контекста приложения, которое извлекает идентификаторы сотрудников. Внутри контекста находятся пары имя-значение (ассоциативный массив): имя указывает на место в памяти, которое имеет значение. Приложение может использовать контекст приложения для информацию о сеансе доступа к пользователю, такую ​​как идентификатор пользователя или другой пользовательскую информацию или идентификатор клиента, а затем безопасно передать это данных в базу данных. Затем вы можете использовать эту информацию для разрешить или запретить пользователю получать доступ к данным через выражение. Вы можете использовать контексты приложений для аутентификации обоих базы данных и пользователей без базы данных.

Если вы хотите, чтобы v допустимое значение должно быть одинаковым во всех сеансах для любого объекта PL/SQL, обращающегося к переменной, затем используйте таблицу базы данных, чтобы сохранить значение.

Например, поскольку T.Kyte предлагает здесь

CREATE TABLE global_value(x INT); INSERT INTO global_value VALUES (0); COMMIT; CREATE OR replace PACKAGE get_global AS FUNCTION Val RETURN NUMBER; PROCEDURE set_val ( p_x IN NUMBER ); END; / CREATE OR replace PACKAGE BODY get_global AS FUNCTION Val RETURN NUMBER AS l_x NUMBER; BEGIN SELECT x INTO l_x FROM global_value; RETURN l_x; END; PROCEDURE Set_val(p_x IN NUMBER) AS PRAGMA autonomous_transaction; BEGIN UPDATE global_value SET x = p_x; COMMIT; END; END; /

Оцените статью
Добавить комментарий