如何在PL/SQL中聲明一個會話變量 - 只在會話期間持續存在,而不必將其存儲在數據庫本身中?PL/SQL:如何聲明會話變量?
13
A
回答
11
您創建一個包級別變量。這是一個小例子:
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
錯誤。每個數據庫會話都有自己的值。您可以嘗試以下操作:
SELECT my_package.get_a FROM DUAL;
11
您可以使用「用戶創建的上下文」來存儲跨會話中多個單元共享的數據。
首先,創建上下文:
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')
相關問題
- 1. 聲明會話變量php
- 2. 撿起聲明的會話變量
- 3. 通過會話聲明變量
- 4. 如何在c#中聲明COOKIE LESS會話變量!
- 5. 如何在C#中聲明會話變量?
- 6. PHP聲明全局變量和會話變量
- 7. PLSQL函數聲明
- 8. 如何聲明變量
- 9. 如何聲明變量
- 10. 「如果」聲明和會話
- 11. 變量聲明?
- 12. 聲明變量
- 13. 聲明變量
- 14. 聲明變量
- 15. 變量聲明
- 16. 變量聲明
- 17. 聲明變量
- 18. 在mysql中的PLSQL觸發器中聲明變量
- 19. 我應該在asp.net中聲明會話變量
- 20. Oracle PLSQL案例聲明
- 21. PHP:會話變量被相同名稱的聲明變量覆蓋
- 22. Var聲明會覆蓋當前變量
- 23. 1聲明多個變量的聲明,如聲明語句
- 24. SQL變量如果聲明
- 25. 必須聲明標量變量/變量已經聲明
- 26. 相關會話聲明
- 27. C++變量聲明
- 28. Java聲明變量
- 29. JavaScript變量聲明
- 30. 變量聲明++型
當我創建上下文,它說:ORA-28265:名稱空間以 'SYS_' 是不允許的。 我試圖將其設置爲變量。但它設置變量名稱而不是值 – 2016-11-26 05:09:22