Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2011
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Exclamation Variables Globales

Hola a todos he realizado esta misma pregunta solo que años atrás cuando solo había Firebird 1.5.
En ese entonces solo quería poder definir en alguna parte de la base de datos una especie de por así llamarles Etiquetas las cuales pudieran utilizarse en cualquier código o procedimiento almacenado.

Ejemplo:

#define NUM_PI = 3.1415. (Similar a lenguaje C++ solo como Ejemplo)


Después utilizarlos en algún código de algún o todos los procedimientos:

FOR SELECT...
BEGIN
IF(:VARX=NUM_PI)
BEIGN
END
END

Según entendía esto o algo similar se podría utilizar en versiones futuras como la actual 2.5 pero no lo encuentro hasta el momento. Alguien sabe de alguna solución a este tipo de requerimiento.

Por su ayuda muchas gracias.
Responder Con Cita
  #2  
Antiguo 08-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Abel.

Hasta donde sé Firebird no contempla variables globales.

Si usas una versión anterior a la 2.0 podés usar UDF's o crearte un procedimiento:
Código SQL [-]
CREATE PROCEDURE NUM_PI RETURNS(PI DOUBLE PRECISION) 
AS
BEGIN
  PI = 3.141592654;
END

A partir de la versión 2.0 tenes la opción de usar RDB$SET_CONTEXT y RDB$GET_CONTEXT:
Código SQL [-]
CREATE PROCEDURE NUM_PI
AS
BEGIN
  RDB$SET_CONTEXT('USER_TRANSACTION', 'NUM_PI', 3.141592654);
END;

Luego de ejecutar el procedimiento,
Código SQL [-]
  EXECUTE PROCEDURE NUM_PI;
podés usarlo hasta en un SELECT, como por ejemplo:
Código SQL [-]
SELECT RDB$GET_CONTEXT('USER_TRANSACTION','NUM_PI') FROM RDB$DATABASE;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 11-11-2011
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Muchas Gracias por tu amable respuesta. Ahora entiendo como seria el uso a partir de la versión 2.0.
Me imagino que el procedimiento que marcas como "CREATE PROCEDURE NUM_PI" se ejecutaria solo una vez para grabar el valor en la base de datos actual.
y despues de ahi solo haces uso de este valor a través de los dos metodos que citas.
Solamente validos para la base de datos donde ejecutaste el primer procedimiento.
Responder Con Cita
  #4  
Antiguo 11-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Abel Garcia Ver Mensaje
Me imagino que el procedimiento que marcas como "CREATE PROCEDURE NUM_PI" se ejecutaria solo una vez para grabar el valor en la base de datos actual.
y despues de ahi solo haces uso de este valor a través de los dos metodos que citas.
Solamente validos para la base de datos donde ejecutaste el primer procedimiento.
Hola Abel.

Mas o menos si... Una vez creado, el procedimiento queda en la base de datos en forma definitiva. Pero lamentablemente para lo que buscas hacer, el nombre de espacio USER_TRANSACTION persiste lo que dura la transacción activa y USER_SESION tiene una vida igual a la duración de la sesión actual, luego de la cuál ambos se inicializan. Por lo que deberías llamar al procedimiento NUM_PI para registrar el valor nuevamente.

Creo que la solución más persistente es almacenar el/los valores que van a usarse como constantes en una tabla.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-11-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Acompaño la opinión de ecfisa, me inclinaría a pensar más en una tabla CONSTANTES y extraer de ésta el valor.

Aunque, si la idea es poder utilizar de éstas en otras bases de datos y entornos me parece lo más lógico, limpio, y natural definir UDFs... Es más no me extrañaría que ya alguien haya implementado una biblioteca llena de UDFs que implementen (o estimen) estas constantes; al menos la más comunes y empleadas en cálculos y operaciones de ingeniería. Con buscar no se pierde nada
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 11-11-2011
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Ups definitivo, creo que es mejor optar por una tabla de Constantes. Dado lo que me explican.
lamentable mente mi idea va un poco más orientada a soluciones que se podrían aplica a este tipo de códigos:

KIND: Columna que Identifica el tipo de Registro.

IF ( KIND in (213 /*TIPO DE REG X*/,
206 /*TIPO DE REG Y*/,
......,
......,
215/*TIPO DE REG Z*/,
)
)
THEN
BEGIN
END

Donde por ejemplo en este pedazo de código el Numero 213 me identifica un tipo en específico de Registro y para no estar marcando cada vez
" 213/*TIPO DE REG XXXX*/ " seria usar un constante con nombre y valor definido en alguna parte de la base de datos facil de cambiar o alterar sin tener que buscar en toda la BD donde se uso por ejemplo el numero 213.

Pues esa era la cuestión.

Pero pues entiendo que esto no es posible hasta el momento por lo tanto a esperar....


Muchas gracias por el Apoyo compañeros.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
variables globales pulpin C++ Builder 2 03-04-2008 05:09:28
Uff. variables globales en php.ini Nati PHP 1 26-06-2007 10:02:49
variables globales henrygale Varios 9 06-04-2007 01:47:05
Variables Globales Abel Garcia Firebird e Interbase 8 26-09-2005 16:20:59
Variables globales en PHP JulioGO PHP 3 08-04-2005 15:36:57


La franja horaria es GMT +2. Ahora son las 17:35:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi