Posteriormente a mirar en diversos repositorios y foros de internet al terminar hemos descubierto la resolución que te enseñaremos más adelante.
Solución:
Cree un nuevo paquete con su variable en la especificación del paquete, así:
CREATE PACKAGE my_public_package IS
my_var Number;
END;
Ahora puede acceder a la variable en cualquier código con acceso a my_public_package
...
my_public_package.my_var := 10;
...
¿Cómo puedo definir una variable global en PL/SQL que estará disponible en todas las funciones/procedimientos/paquetes?
Podría usar una variable de contexto de aplicación global.
Un contexto de aplicación es un conjunto de pares de nombre y valor que Oracle Database almacena en la memoria. El contexto de la aplicación tiene una etiqueta denominada espacio de nombres, por ejemplo, empno_ctx para un contexto de aplicación que recupera ID de empleados. Dentro del contexto están los pares de nombre y valor (una asociación array): el nombre apunta a una ubicación en la memoria que contiene el valor. Una aplicación puede utilizar el contexto de la aplicación para acceder a la información de la sesión sobre un usuario, como el ID de usuario u otra información específica del usuario, o un ID de cliente, y luego pasar estos datos de forma segura a la base de datos. A continuación, puede utilizar esta información para permitir o impedir que el usuario acceda a los datos a través de la aplicación. Puede usar contextos de aplicación para autenticar usuarios de bases de datos y usuarios que no son de bases de datos.
si quieres que la vel valor variable debe ser el mismo en todas las sesiones para cualquier objeto PL/SQL que acceda a la variableluego usa un tabla de base de datos para almacenar el valor.
Por ejemplo, como sugiere T.Kyte aquí
CREATE TABLE global_value(x INT);
INSERT INTO global_value VALUES (0);
COMMIT;
CREATE OR replace PACKAGE get_global
AS
FUNCTION Val
RETURN NUMBER;
PROCEDURE set_val (
p_x IN NUMBER );
END;
/
CREATE OR replace PACKAGE BODY get_global
AS
FUNCTION Val
RETURN NUMBER
AS
l_x NUMBER;
BEGIN
SELECT x
INTO l_x
FROM global_value;
RETURN l_x;
END;
PROCEDURE Set_val(p_x IN NUMBER)
AS
PRAGMA autonomous_transaction;
BEGIN
UPDATE global_value
SET x = p_x;
COMMIT;
END;
END;
/
Si te gustó nuestro trabajo, eres capaz de dejar un enunciado acerca de qué te ha gustado de este post.