PDA

Ver la Versión Completa : Declaracion de Variables


berfer
16-08-2006, 17:43:05
Hola, alguien me puede decir como se puede definir una variable que sea del mismo tipo que el campo de una tabla? seria algo asi

Declare variable pepe as nombretabla.nombrecampo ;

estoy usando firebird y desarrollo con ibexpert y no se como puedo hacer esto, si alguien sabe y me puede ayudar seria un honor para mi.


Gracias

maeyanes
16-08-2006, 17:58:58
Creo que no se puede hacer lo que dices, pero puedes probar usando dominios (Domains), esto al menos en Interbase no funciona pero puede que Firebird si tenga esta posibilidad.


Saludos...

berfer
17-08-2006, 14:56:21
Hola Maeyanes, he probado lo que me dijistes de usar dominios y no se puede, luego no hay forma de poder asociar el dominio a una variable. Al final lo que hice fue darle el mismo tipo a la variable que al campo de la tabla aunque esto tiene problemas ya que si se cambia el tipo del campo luego puede que el proceso falle a menos que se lo cambies tambien a la varible pero me parece que de momento no nos queda otra.

Muchas gracias

Toni
11-10-2011, 16:45:12
Hola,

Me gustari saber si hoy dia esta solucionado este tema de poder utilizar los dominios de Firebird tambien en las variables o parametros de los procedimientos almacenados.

maeyanes
11-10-2011, 16:52:35
Hola...

Parece ser que desde la versión 2.1 de Firebird ya es posible:

http://www.developeando.com/2008/09/firebird-21-domains-in-psql.html

Ahora, si cambias la definición de algún dominio, aún tienes que recompilar tus procedimientos y disparadores...



Saludos...

Toni
11-10-2011, 17:15:15
Muchas gracias Maeyanes.

Lo pongo aqui para que este mas visible, simplemente hay que utilizar el nuevo keyword TYPE OF en el momento de declarar las variables o parametros:


Now with version 2.1 I can use domain in PSQL.
I just need to type the domain name if i want to inheriting the check clause and the default value,
or I can use the TYPE OF keyword if I just want the data type so I can define something like this:


CREATE PROCEDURE INSERT_PRODUCT(
DESCRIPTION STRING,
PRICE TYPE OF MONEY,
ACTIVE BOOL
)
BEGIN
...
END

Es una muy buena cosa! ;)

Aunque lo estoy probando desde el EMS IB MANAGER 3 y me da error de keyword no reconocido. :( Sera por la version del IB MANAGER o porque?

Nota: Utilizo la version de servidor Firebird 2.5

Toni
11-10-2011, 17:54:28
Despues de realizar unas pruebas he visto que sino ponia el keyword TYPE OF y ponia directamente el dominio si que podia recompilar el procedimiento almacenado con el IB Manager, aunque me indicaba un error en la precompilación de keyword no reconocido.


Now with version 2.1 I can use domain in PSQL.
I just need to type the domain name if i want to inheriting the check clause and the default value,
or I can use the TYPE OF keyword if I just want the data type so I can define something like this:


CREATE PROCEDURE INSERT_PRODUCT(
DESCRIPTION STRING,
PRICE MONEY,
ACTIVE BOOL
)
BEGIN
...
END

Donde MONEY es un dominio valido.


Mi sorpresa es que despues de compilar el procedimiento al volver a editar el procedimiento, lo que ha hecho FB o IB MANAGER es buscar el dominio en cuestion y sustituir del codigo del procedimiento el nombre del dominio por el tipo de dato que tienen asignado ese dominio. :eek:

Es decir que si despues modifico el dominio y vuelvo a compilar dicho procedimiento ya no esta relacionado con el dominio y no me actualizara el tipo o tamaño de la variable. Por lo que no entiendo para que sirve esto.

Si alguien me puede sacar de dudas si este es el funcionamiento correcto o no de los dominios en los procedimientos. Gracias.

Casimiro Notevi
11-10-2011, 18:42:23
Yo siempre lo hago con dominios y no me lo cambia ¿estás seguro?.
Uso ibexpert y flamerobin.

maeyanes
11-10-2011, 18:56:07
Hola...

Tal vez se deba a la versión de la aplicación que usas para administrar tus bases de datos.



Saludos...

Toni
13-10-2011, 21:00:07
He realizado mas pruebas y confirmo que FB2.5 lo realiza correctamente y es una cuestion de mi herramienta que se ha quedado obsoleta al respecto. :(

Aunque despues de compilar un procedimiento alm. utilizando dominios en los parametros me lo cambia en pantalla por el valor del dominio, si cambio el tamaño del dominio y vuelvo a abrir el procedimiento me sale actualizado el nuevo tamaño, pero no me hace referencia al dominio. :(


CREATE PROCEDURE INSERT_PRODUCT(
DESCRIPTION STRING,
PRICE MONEY,
ACTIVE BOOL
)
BEGIN
...
END

Donde MONEY es NUMERIC(18,3).


Despues de compilar si vuelvo a abrir el procedimiento me muestra:

CREATE PROCEDURE INSERT_PRODUCT(
DESCRIPTION STRING,
PRICE NUMERIC(18,3),
ACTIVE BOOL
)
BEGIN
...
END

Donde MONEY es NUMERIC(18,3).


Pero sin embargo si modifico el dominio si que internamente funciona bien y lo actualiza. Pero igualmente no podre utilizarlo porque cuando recompile de nuevo un procedimiento que ha perdido la referencia con el dominio ya se habra liado.. :(

Mas que nada por si alguien le pasa.

Casimiro Notevi
13-10-2011, 21:12:20
[..] es una cuestion de mi herramienta que se ha quedado obsoleta al respecto.

Puede que sólo sea un "bug" y lo hayan solucionado, en su web dicen que es compatible con FB2.5 por lo que seguramente deben haber tenido en cuenta ese detalle.

Compatible with any Firebird server version up to 2.5