PDA

Ver la Versión Completa : Generador a partir del nombre de la tabla..


Delfino
06-12-2007, 11:21:20
Como se puede obtener mediante SQL dado el nombre de una tabla, el generator q tiene y el field el q se incrementa con ese generator?

jhonny
06-12-2007, 15:50:08
Inicialmente podria ser un SQL como el siguiente:


select rdb$trigger_name, rdb$trigger_source from rdb$triggers
where rdb$relation_name = UPPER('Nombre_de_la_tabla') and rdb$trigger_source like ('%gen_id%')


El problema es que que el generador no afecta directamente el campo de una tabla, si no que lo hace por medio de un Trigger (Mejor dicho es el Trigger el que lo hace y para ello usa el generador), por lo que es en el Trigger donde se encuentra la información que necesitas... con el SQL que te he mostrado podriamos comenzar a trabajar, quizá con la compañia de la función SubString y alguna otra que devuelva la posición de un substring dentro de una cadena (Tipo Pos() de Delphi).

jhonny
06-12-2007, 16:35:32
La unica "chapuceria" que me funciono mas o menos bien para traer los generadores de dicha tabla a sido la siguiente en FB 2.1 Beta 2:


SELECT
SUBSTRING(rdb$trigger_source
FROM POSITION('gen_id' IN LOWER(rdb$trigger_source)) + 7 FOR
((POSITION(',' IN LOWER(rdb$trigger_source))) - (POSITION('gen_id' IN LOWER(rdb$trigger_source)) + 7)))
FROM rdb$triggers
WHERE rdb$relation_name = UPPER('Nombre_de_la_tabla') AND LOWER(rdb$trigger_source) LIKE ('%gen_id%')


El 7 es el tamaño de la palabra gen_id mas un espacio :D, se que no es una excelente idea pero te aproximara un poco o por lo menos tendremos una idea de como hacerlo e ir mejorado este asunto.

Position es una función de FireBird 2.1 que aún no tiene su versión estable, ya que todavia es Beta 2.

Lepe
06-12-2007, 18:56:23
Yo lo obtengo así:


nombreGen := 'gen_'+ tablename + '_id';


Pero claro, la Base de datos la he creado yo, además de seguir claros patrones de diseño.

¿no han seguido algún patrón? Fijate bien, ojalá tengas suerte.

Saludos