Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2013, 06:30
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
trigger truncate, vista parámetro

Amigos,
me encuentro en la situación siguiente:
tengo una tabla de la que tengo que sacar mediante consulta y ordenados los registros cuyo FKStatus = 5 y guardarlos en otra tabla para trabajar sobre ellos, pero necesito tener un número de orden por orden alfabético. Y eso debe hacerlo dinámicamente, es decir, cada vez que cambie ese valor en actualización, o se borre el registro o se actualice el registro con ese valor.
la consulta es fácil:
Código MySQL:
Ver original
  1. SELECT PKlema, lema FROM lemas_lemas WHERE FKStatus = 5 ORDER BY lema
Necesito crear una tabla con esos datos o una vista donde cargar numerados esos registros y recorrerlos luego con facilidad (ahora hay sobre unas centenas, pero más adelante habrá miles), y no es lo mismo tener que ordenar y numerar 30000 registros o más en el futuro, que hacerlo sobre los que ahora tienen ese FKStatus y que ya tengan su número. El recorrido con la programación y también la búsqueda serán más eficientes.
Pues bien, si creo la tabla con los campos y cada vez que se añade o se borra un FKStatus = 5 quiero hacer TRUNCATE y luego INSERTAR los datos de un SELECT mediante un trigger, me encuentro con que los triggers no permiten usar TRUNCATE (lo que me facilitaría un autoincrementable), porque es DDL, y luego realizar el INSERT... FROM SELECT...
Si creo una vista con la consulta para luego volver a consultarla, me doy cuenta de que las vistas no permiten pasar parámetros para hacer la numeración necesaria. Me devuelve error al intentarlo.
Con un procedimiento almacenado puedo hacerlo, claro, pero tengo que llamarlo cada vez que cambie el dato al insertar o borrar, y me gustaría no tener que llamarlo en todos los lugares de programación donde se inserte, se actualice o se borre algo (aunque si los trigger pudieran, tendría que crear uno para cada caso), pero me temo que será lo que tenga que hacer o resolverlo en programación.
Tal vez se os ocurra algo sobre los trigger o vistas que pueda ayudar, o creéis que hay que hacerlo necesariamente con un procedimiento almacenado o con programación.
He probado la vista y el trigger, y luego visitado la red para ver cuál era el problema real.

Espero haberme explicado bien. Naturalmente, solo estoy pidiendo orientación para hacerlo con funcionalidades y herramientas propias de la base de datos.
Gracias.

Última edición por jurena; 24/11/2013 a las 09:25