Wie deklariere ich eine Sitzungsvariable in PL/SQL - eine, die nur für die Dauer der Sitzung bestehen bleibt, ohne dass ich sie in der Datenbank selbst speichern muss?PL/SQL: Wie deklariere ich Sitzungsvariablen?
Antwort
Sie erstellen eine Package-Level-Variable. Dies ist ein minimales Beispiel:
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;
/
Wenn Sie dies tun, sollten Sie auf lesen (und korrekt verarbeiten) ORA-04068
Fehler. Jede Datenbanksitzung hat ihren eigenen Wert für eine. Sie können versuchen, diese mit:
SELECT my_package.get_a FROM DUAL;
Sie verwenden einen ‚benutzererstellte Kontext‘ zum Speichern von Daten über mehrere Einheiten innerhalb einer Sitzung geteilt.
Erstellen Sie zunächst einen Kontext:
CREATE CONTEXT SYS_CONTEXT ('userenv', 'current_schema')|| '_ctx' USING PKG_COMMON
Zweitens ein Paket erstellen, die Ihren Kontext verwalten würde:
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;
Die prc_set_context_value kann weiter fortgeschritten sein, das ist nur ein Beispiel. Mit dem Kontext und dem erstellten Paket können Sie sie verwenden. eine Kontextvariable Stellen Sie einen Prozeduraufruf
begin
PKG_COMMON.prc_set_context_value('MyVariable', 9000)
end;
und sie mit überall verwenden - jedes Verfahren, Paket, Funktion oder ein Ereignis eine Ansicht.
CREATE VIEW V_TEST AS
SELECT ID, LOGIN, NAME
FROM USERS
WHERE ROLE_ID = SYS_CONTEXT(PKG_COMMON.FCN_GET_CONTEXT_NAME, 'MyVariable')
Weitere Informationen http://www.psoug.org/reference/sys_context.html
- 1. Sitzungsvariablen
- 2. Wie lösche oder entferne ich Sitzungsvariablen?
- 3. Wie deklariere ich meine eigene CGRectZero-Konstante?
- 4. Wie deklariere ich eine verschachtelte Enumeration?
- 5. Wie deklariere ich ein Array in Python
- 6. Wie deklariere ich eine Variable in MySQL?
- 7. Mehrzeilige Zeichenfolge mit Argumenten. Wie deklariere ich?
- 8. Wie deklariere ich Json-Objekt für Datentabelle
- 9. Wie deklariere ich Gerätefunktionen für diese App?
- 10. Wie deklariere ich typedef in Swift
- 11. Wie deklariere ich MAX_DOUBLE in VB6?
- 12. Wie deklariere ich einen Zeiger (Byte ^)?
- 13. Wie deklariere ich mehrere veränderbare Variablen gleichzeitig?
- 14. Wie deklariere ich eine 2D-String-Arraylist?
- 15. Wie deklariere ich ein Listenelement als REGEX
- 16. webgl - wie deklariere ich eine float-Variable
- 17. Wie deklariere ich einen JSON-String richtig?
- 18. Wie deklariere ich einen Vektor in OpenCV?
- 19. ColdFusion-Sitzungsvariablen
- 20. plsql Kundeninformationen
- 21. Was bedeutet "deklariere + x" gegen "deklariere -x"?
- 22. Wie übergebe ich Sitzungsvariablen an Paypal mit Kauf jetzt Button
- 23. Wie kann ich einen GridView-Zellenwert in einer Sitzungsvariablen speichern?
- 24. Wie speichere ich Wert in meiner eigenen Sitzungsvariablen in Magento?
- 25. PLSQL JDBC: Wie bekomme ich die letzte Zeilen-ID?
- 26. Indizes in Sitzungsvariablen aufrufen
- 27. Einschränken von PHP-Sitzungsvariablen
- 28. Sitzungsvariablen mit Gurkengeschichten
- 29. asp mvc Sitzungsvariablen
- 30. Sitzungsvariablen in MVC 5
Wenn ich mich Kontext schaffen es sagt: ORA-28265: namespace mit 'sys_' beginnen ist nicht erlaubt. Ich habe versucht, es in Variable zu setzen. Aber es setzt Variablennamen anstelle von Werten –