Comment déclarer une variable de session en PL/SQL - une variable qui ne durera que pendant la durée de la session, sans que je doive la stocker dans la base de données elle-même?PL/SQL: Comment déclarer des variables de session?
Répondre
Vous créez une variable de niveau de package. Ceci est un exemple minimal:
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;
/
Si vous faites cela, vous devriez lire sur (et gérer correctement) ORA-04068
erreurs. Chaque session de base de données aura sa propre valeur pour un. Vous pouvez essayer avec:
SELECT my_package.get_a FROM DUAL;
Vous pouvez utiliser un « contexte créé par l'utilisateur » pour stocker des données partagées entre plusieurs unités au sein d'une session.
D'abord, créer un contexte:
CREATE CONTEXT SYS_CONTEXT ('userenv', 'current_schema')|| '_ctx' USING PKG_COMMON
Deuxièmement, créer un package qui gérerait votre contexte:
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;
Le prc_set_context_value peut être plus avancé, c'est juste un exemple. Avec le contexte et le paquet créé, vous pouvez commencer à les utiliser. Définir une variable de contexte à l'aide d'un appel de procédure
begin
PKG_COMMON.prc_set_context_value('MyVariable', 9000)
end;
et l'utiliser partout - toute procédure, package, fonction ou événement en vue.
CREATE VIEW V_TEST AS
SELECT ID, LOGIN, NAME
FROM USERS
WHERE ROLE_ID = SYS_CONTEXT(PKG_COMMON.FCN_GET_CONTEXT_NAME, 'MyVariable')
Pour plus d'informations, consultez http://www.psoug.org/reference/sys_context.html
- 1. Comment déclarer des variables et utiliser des instructions dans LINQPad?
- 2. Comment déclarer des variables statiques dans Delphi 2009?
- 3. Comment déclarer deux variables statiques différentes? (C++)
- 4. Variables de session Java
- 5. Variables de session dans JSP
- 6. Javascript et variables de session
- 7. Fonctions de PLSQL help
- 8. Détruire des variables de session dans une autre application
- 9. Comment activer les variables de session dans sharepoint?
- 10. plsql format numérique personnalisé
- 11. Variables de session PHP - disparaissent et réapparaissent
- 12. ASP.NET WebForms - Variables de session Null
- 13. Variables de session et services Web
- 14. Comment donner des variables JavaScript à partir de variables ASP.NET?
- 15. Puis-je définir le délai d'attente de session pour une variable de session spécifiée différemment des autres variables de session?
- 16. Déclarer les variables membres avec la classe gen dans Clojure
- 17. Comment concaténer des noms de variables en javascript?
- 18. Combien de façons y a-t-il de déclarer des variables dans les facelets?
- 19. plsql enfant parent oracle
- 20. plsql curseur itératif problème
- 21. Comment découper la date dans PLSQL?
- 22. Comment envoyer des variables d'un contrôle utilisateur à un autre sans utiliser de session?
- 23. Comment partager des variables de session dans deux applications Web différentes?
- 24. Comment stocker et récupérer des variables de session personnalisées dans Drupal 6?
- 25. Déclaration de variables dans des cellules Excel
- 26. comment déclarer statique NSString?
- 27. Comment faire une sauvegarde d'une base de données PLSQL?
- 28. Mise en cache incohérente du navigateur des variables de session - des solutions?
- 29. Problème avec mes variables de session dans asp.net 2.0
- 30. Gestion des rôles variables
Quand je crée contexte, il dit: ORA-28265: namespace commençant par 'SYS_' est pas autorisé. J'ai essayé de le mettre en variable. Mais il définit le nom de la variable au lieu de la valeur –