Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Variables en Select (https://www.clubdelphi.com/foros/showthread.php?t=58405)

eduarcol 19-07-2008 08:56:10

Variables en Select
 
estoy realizando un trigger, dentro de este necesito recuperar valores de una tabla, hasta el momento llevo esto:

Código Delphi [-]
declare variable columna varchar(8);
columna = 'IMP' || New.tipo;
Select :columna, coalesce(porcimpuesto, 0) from cuentasbancarias where codigocuenta = new.codigocuenta into :resulta, :pimp;

pero al ejecutarlo me da el error String trucation or numeric overflow. Logre aislar el error y si sustituyo :columna por el nombre de un campo ya no sale mas.

Habra alguna forma de decirle en el select la columna como variable??

celades1 19-07-2008 12:49:55

hola

No hay ningun problema por poner variables en select, yo lo hago a menudo
ademas el error que te da tiene que ser por tamaño del varchar, comprueba que no se desborde ninguna de las dos variables resulta y columna o dales
varchaR(100) el error creo que va por ahi

Sino danos todos lo tamaños de resulta columna y tipo


Saludos

eduarcol 20-07-2008 15:39:17

resulta es de varchar(1) igual que la columna que almacena, y pimp es de tipo float tambien como la columna :confused:

celades1 20-07-2008 16:15:14

Hola

Código SQL [-]
declare variable columna varchar(8);
columna = 'IMP' || New.tipo;
Select :columna, coalesce(porcimpuesto, 0) from cuentasbancarias where codigocuenta = new.codigocuenta into :resulta, imp;

Si resulta es varchar(1) nunca puede recibir un :columna que es varchar(8) y
que ademas tendra 'IMP' que ya tiene 3


ahi esta el error

Saludos

eduarcol 20-07-2008 16:30:32

pero ese es el nombre del campo, resulta almacena el resultado el cual si es de varchar(1)

el nombre del campo puede tener entre 6 y 8 caracteres dependiendo de TIPO, por eso es varchar(8)

celades1 20-07-2008 19:44:00

hola

eso no se puede hacer como tu lo entiendes, ya que en realidad :columna no lo coge com nombre de columna sino como el valor que guarda la variable
Si quieres hacer esto debes utilizar el execute statement a partir de firebird 1.5 creo

seria algo asi

Código SQL [-]
EXECUTE STATEMENT 'SELECT '||:columna||',coalesce(porcimpuesto, 0)  from cuentasbancarias where codigocuenta='||cast(new.codigocuenta as varchar(15)) into :resulta,:imp;


Saludos


La franja horaria es GMT +2. Ahora son las 08:44:38.

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