Saltar al contenido

¿Cómo definir una variable global en PL/SQL en Oracle?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *