Как объявить переменную сеанса в PL/SQL, которая будет сохраняться только на время сеанса, без необходимости хранить ее в самой базе данных?PL/SQL: Как объявить переменные сеанса?
ответ
Вы создаете переменную уровня пакета. Это минимальный пример:
CREATE OR REPLACE PACKAGE my_package
AS
FUNCTION get_a RETURN NUMBER;
END my_package;
/
CREATE OR REPLACE PACKAGE BODY my_package
AS
a NUMBER(20);
FUNCTION get_a
RETURN NUMBER
IS
BEGIN
RETURN a;
END get_a;
END my_package;
/
Если вы сделаете это, вы должны прочитать на (и обрабатывать правильно) ORA-04068
ошибки. Каждый сеанс базы данных будет иметь собственное значение для a. Вы можете попробовать это с:
SELECT my_package.get_a FROM DUAL;
Вы можете использовать «созданного пользователя контекст» для хранения данных общих для нескольких единиц в течение сеанса.
Во-первых, создать контекст:
CREATE CONTEXT SYS_CONTEXT ('userenv', 'current_schema')|| '_ctx' USING PKG_COMMON
Во-вторых, создать пакет, который будет управлять ваш контекст:
CREATE OR REPLACE PACKAGE PKG_COMMON
IS
common_ctx_name CONSTANT VARCHAR2 (60)
:= SYS_CONTEXT ('userenv', 'current_schema')
|| '_ctx';
FUNCTION fcn_get_context_name RETURN VARCHAR2;
PROCEDURE prc_set_context_value (var_name VARCHAR2, var_value NUMBER);
END;
CREATE OR REPLACE PACKAGE BODY PKG_COMMON
IS
FUNCTION fcn_get_context_name
RETURN VARCHAR2
IS
BEGIN
RETURN common_ctx_name;
END;
PROCEDURE prc_set_context_value (var_name VARCHAR2, var_value NUMBER)
IS
BEGIN
DBMS_SESSION.set_context (common_ctx_name, var_name, var_value);
END;
END;
prc_set_context_value может быть более продвинутым, это всего лишь пример. С контекстом и созданным пакетом вы можете начать их использовать. Установить переменный контекст с помощью вызова процедуры
begin
PKG_COMMON.prc_set_context_value('MyVariable', 9000)
end;
и использовать его в любом месте - любая процедура, пакет, функцию или событие просмотр.
CREATE VIEW V_TEST AS
SELECT ID, LOGIN, NAME
FROM USERS
WHERE ROLE_ID = SYS_CONTEXT(PKG_COMMON.FCN_GET_CONTEXT_NAME, 'MyVariable')
Для получения дополнительной информации см http://www.psoug.org/reference/sys_context.html
- 1. PLSQL-переменные
- 2. PLSQL: Объявить не работает
- 3. Как объявить выходную переменную dbms на plsql?
- 4. PLSQL - переменные таблицы слияния
- 5. Как объявить глобальные переменные?
- 6. Как объявить переменные
- 7. Как объявить переменные
- 8. . Чистые переменные сеанса?
- 9. переменные сеанса php переменные
- 10. Как объявить и использовать глобальные переменные?
- 11. Как сбросить переменные сеанса
- 12. Динамические переменные% rowtype в plsql
- 13. Переменные сеанса
- 14. Объявить вложенную таблицу в функции PLSQL
- 15. PLSQL не все связанные переменные
- 16. Как объявить переменные в DUST?
- 17. Как объявить переменные объекта undefined
- 18. Как объявить переменные в XSLT?
- 19. Как объявить переменные в javascript
- 20. Как объявить переменные разного размера
- 21. Как объявить переменные в svg
- 22. Как объявить переменные в @protocol
- 23. как объявить переменные в Swift
- 24. Oracle PLSQL - объявить курсор на несуществующей таблице
- 25. Переменные сеанса
- 26. Python Объявить переменные итеративно
- 27. Лучший способ объявить переменные
- 28. Переменные сеанса в ASP.NET MVC
- 29. Как объявить переменную сеанса в C#?
- 30. Как работают весовые переменные сеанса
Когда я создаю контекст он говорит: ORA-28265: NameSpace начиная с 'sys_' не допускается. Я попытался установить его в переменную. Но вместо значения value вместо него задается имя переменной – 2016-11-26 05:09:22