![]() |
Actualizar un valor en un generador desde un Sp
Necesito actualizar el valor de un generador desde un Sp, con un valor que se encuentra en ese generador, algo
CREATE PROCEDURE Actualizar_Codigo DECLARE VARIABLE ValorNuevoGenerador INTEGER; BEGIN ValorNuevoGenerador =GEN_ID(CODIGO, 0)+1; // Que instruccion utilizo para agregar en el Generador Codigo el nuevo valor END; |
Hola,
Código:
SET TERM !! ; Hay una pega, Si DESPUES de recuperar el valor actual del generador (/* 1 .. */) y ANTES de fijar el nuevo valor (/* 2 .. */), otro usuario hiciese "saltar" el generador (hacia delante, o hacia atrás), ya no se podría garantizar que el generador quedará fijado al valor que pasamos como parámetro al procedimiento. Esto es debido a que los generadores (y por extensión la función GEN_ID) no están sujetos al control de la transacción que los modifica. En entornos de un sólo usuario (o que garanticemos que cuando se utilice el procedimiento sólo hay un usuario conectado a la base de datos), el procedimiento funcionará correctamente, en entornos multiusuario no es posible garantizarlo. Saludos. |
muli, lo que quieres hacer lo puedes hacer de una forma más sencilla así:
CREATE PROCEDURE Actualizar_Codigo BEGIN ValorNuevoGenerador =GEN_ID(CODIGO, 1); END para lo que dice kinobi, en Firebird puedes hacerlo así, de una forma también má sencilla: CREATE PROCEDURE Establecer_GENERADOR_X ( ParNuevoValor INTEGER) AS BEGIN set generator codigo to :parnuevovalor ; END Pero en IB 5.6 la forma de hacerlo es la que dice kinobi. En IB 6.x y posteriores no lo conozco. Un saludo |
Hola,
Cita:
Saludos. Actualización: he estado revisando el changelog de la versión 1.5 y no hacen mención a que se pueda introducir una sentencia DDL como "SET GENERATOR ..." dentro del código de un procedimiento almacenado. Así que me temo que, salvo que se me haya pasado en el changelog o tú puedas demostrarlo, no es posible fijar el valor de un generador dentro de un procedimiento con "SET GENERATOR ..." tampoco con la versión 1.5 de Firebird. |
Efectivamente, tienes toda la razón, eso solo va desde una consulta, pero no desde un procedure o un trigger, y siempre en Firebird 1.5
|
Hago como lo dice Kinobi pero me dice que da error de parsing por SET,
alguien sabe que puede ser |
ja
es el mismo problema que tengo voy a probar de hacerlo desde un tquery .... |
en ese caso tendrias q usar EXECUTE STATEMENT
donde NuevoValor es una varchar almacenando el nuevo valor. |
genial, si que funciona
gracias! |
Hola
Tengo un problema con ésto. En mi DB hay un trigger que tiene la siguiente linea
me da el siguiente error: ---------- ERROR MESSAGE ---------- Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 4, char 7. STATEMENT. ---------------------------------------- Lo extraño es que andaba perfectamente, lo unico que paso en el medio: debí reinstalar firebird en la maquina donde esta la DB por formateo(por supuesto, la misma version)... A alguien se le ocurre cual puede ser el problema? |
Cita:
|
la unica version que siempre tuve es esta: Firebird-1.5.3.4870-0-Win32.exe
:confused::eek: |
Cita:
|
voy a probar reinstalando la version de FB... manotazo de ahogado ya que mucho no se me ocurre...
si alguien tiene algúna idea, estoy pendiente del hilo, gracias.. |
no hay caso ...
no entiendo :mad: |
resp
Eso es todo ya te lo explicaron que es lo no entiendes. |
---------- ERROR MESSAGE ----------
Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 4, char 7. STATEMENT. ---------------------------------------- eso ... igual ya resolvi el asunto de otra manera.... pero queda la intriga por q antes andaba de esa forma y ahora no .... en fin |
La franja horaria es GMT +2. Ahora son las 09:20:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi