如何在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. 撿起聲明的會話變量
- 5. 選擇聲明中的會話變量
- 6. 如何在c#中聲明COOKIE LESS會話變量!
- 7. 如何在會話範圍中使用spring聲明變量MVC
- 8. 如何在C#中聲明會話變量?
- 9. PHP聲明全局變量和會話變量
- 10. PLSQL函數聲明
- 11. 如何聲明變量
- 12. 如何聲明變量
- 13. 如何聲明變量
- 14. 「如果」聲明和會話
- 15. 腓如果會議聲明變量
- 16. PHP:如果聲明變量聲明
- 17. 在mysql中的PLSQL觸發器中聲明變量
- 18. 變量聲明
- 19. 聲明變量
- 20. 變量聲明
- 21. 聲明變量
- 22. 變量聲明
- 23. 變量聲明?
- 24. 聲明變量
- 25. 聲明變量
- 26. 聲明變量,如果變量聲明已經
- 27. 如何聲明一個標量變量?
- 28. 無法正確地在ssh會話中聲明shell變量
- 29. 我應該在asp.net中聲明會話變量
- 30. 未聲明的VB.NET會話變量類型
當我創建上下文,它說:ORA-28265:名稱空間以 'SYS_' 是不允許的。 我試圖將其設置爲變量。但它設置變量名稱而不是值 – 2016-11-26 05:09:22