none
Ayuda restricción en oracle RRS feed

  • Pregunta

  • hola buenas, tengo un problemilla al meter una restricion en la creacion de tablas, tengo que especificar temporadas de la siguinte forma: dos numeros consecutivos separado por una / (ejemplo: 07/08)

    Estoy un poco perdido, podriais ayudar?

    por aqui ando:

    constraint temporadaok check(to_number(substr(temporada,1,2)) '[0-9][0-9]'+1),
    constraint temporadaok2 check(regexp_like(temporada, '[0-9][0-9]{2}|/|[0-9][0-9]{2}'))

    he pensado para que sea numero consecutivo sumar +1 al primer numero, pero nose como indicarlo para que despues salga la cadena de los numero consecutivos con la / en medio. Gracias

    lunes, 12 de marzo de 2018 12:50

Respuestas

  • Hola almorace22:

    Creo que no lo estas enfocando correctamente, o al menos desde mi punto de vista estas intentando conseguir cosas, que quizá no sean las más adecuadas, ni en lógica, ni en rendimiento.

    Yo lo veo así:

    Tu tabla de temporadas tiene que tener un id numerico (por ejemplo a través de una sequencia), y un codigo, aqui es donde va la parte del 07/08. Tu id, es el que relacionas, bien sea con articulos porque así lo has definido o con facturacion (como se conciben las temporadas es otra guerra diferente). Y es la que te da la lógica de las consultas que a posteriori tengas que realizar.

    Para dar de alta una temporada, en el software cliente, por ejemplo solo le dejas poner dos números. por tanto en las cajas que utilices, se ven activas para poner dos dígitos, y los otros dos según va pulsando carácteres se actualizan (o al salir de la caja o como prefieras).

    Luego puedes aplicar la restricción si así lo quieres para que tenga los 5 carácteres ([0-9][0-9]/[0-9][0-9]) y con eso tienes el camino hecho.

    Si no es el caso, tambien puedes grabar solo en la base de datos dos digitos, y a posteriori poner un trigger que en caso de insercción añada / y el año siguiente. (aunque tampoco me parece la opción lógica).

    Creo que no puedes, utilizar ToNumber a posteriori de una expresión, por eso te falla el mas 1. Te hablo un poco de memoria.

    Te pongo un vínculo a expresiones regulares, que seguro que ya tienes, en oracle, simple y muy bueno Expresiones regulares

    No te parece una manera mejor de enfocarlo.

    Saludos

    jueves, 15 de marzo de 2018 6:24

Todas las respuestas

  • alguien? que me pueda echar una mano, porfa. gracias
    miércoles, 14 de marzo de 2018 15:01
  • Hola almorace22:

    Creo que no lo estas enfocando correctamente, o al menos desde mi punto de vista estas intentando conseguir cosas, que quizá no sean las más adecuadas, ni en lógica, ni en rendimiento.

    Yo lo veo así:

    Tu tabla de temporadas tiene que tener un id numerico (por ejemplo a través de una sequencia), y un codigo, aqui es donde va la parte del 07/08. Tu id, es el que relacionas, bien sea con articulos porque así lo has definido o con facturacion (como se conciben las temporadas es otra guerra diferente). Y es la que te da la lógica de las consultas que a posteriori tengas que realizar.

    Para dar de alta una temporada, en el software cliente, por ejemplo solo le dejas poner dos números. por tanto en las cajas que utilices, se ven activas para poner dos dígitos, y los otros dos según va pulsando carácteres se actualizan (o al salir de la caja o como prefieras).

    Luego puedes aplicar la restricción si así lo quieres para que tenga los 5 carácteres ([0-9][0-9]/[0-9][0-9]) y con eso tienes el camino hecho.

    Si no es el caso, tambien puedes grabar solo en la base de datos dos digitos, y a posteriori poner un trigger que en caso de insercción añada / y el año siguiente. (aunque tampoco me parece la opción lógica).

    Creo que no puedes, utilizar ToNumber a posteriori de una expresión, por eso te falla el mas 1. Te hablo un poco de memoria.

    Te pongo un vínculo a expresiones regulares, que seguro que ya tienes, en oracle, simple y muy bueno Expresiones regulares

    No te parece una manera mejor de enfocarlo.

    Saludos

    jueves, 15 de marzo de 2018 6:24