none
Procedimiento almacenado-> guardar o actualizar RRS feed

  • Pregunta

  • Hola a todos, mi nombre es Javier.

    Escribo por que nunca he realizado un procedimiento almacenado. estoy trabajando con SQLworkbench y tengo una tabla llamada config, dentro de ella tengo las colmnas:

    1- priority_cam

    2- tipo_camara

    3- stations

    4- playas_id_playas

    5- camPowerOn

    6- camPowerOff 

    y tengo que ponerle una condición. si al aplicar un INSERT INTO el valor de playas_id_playas existe y el valor de priority_cam es igual, solo deje actualizar el valor de tipo_camara, camPowerOn y camPowerOff ó si el playas_id_playas existe pero priority_cam es distinto, entonces que se agregue el INSERT INTO pero que además actualizase los valores de camPowerOn y camPowerOff de todas las filas que contengan el mismo layas_id_playas.

    Como digo nunca he trabajado con esto y estoy muy perdido de como hacerlo, y por eso les pido ayuda.

    Saludos y desde ya gracias!!


    jueves, 5 de marzo de 2020 3:35

Todas las respuestas

  • Hola Javier:

    Has puesto tú pregunta en un foro de SQL Server y estás trabajando con MySQL.

    Aunque los lenguajes son muy parecidos, cada uno tiene sus particularidades.

    Un procedure es una secuencia de instrucciones sql, por tanto puedes hacer varios insert y varios updates, etc.... en el mismo procedure.

    Tienes que crear el procedure, con los parámetros que necesites pasarle para realizar tú códgo. A priori tantos como columnas tenga la sentencia de inserción (6). Dentro del procedure, ya tienes el contenido de los parámetros, puedes realizar una select contra la tabla para saber si existe y el valor guardarlo en una variable y en la siguiente instrucción evaluar el contenido de la variable, y si no es null, por tanto existe, entonces haces la update y si no entonces haces el insert.

    Existen otras maneras de realizar esto, pero esta es la más sencilla.

    Create procedure mysql

    https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html

    If Else

    https://dev.mysql.com/doc/refman/8.0/en/if.html

    Foros de mysql en español

    https://forums.mysql.com/read.php?71,101916,101916

    StackOverflow español mySql

    https://es.stackoverflow.com/questions/tagged/mysql?

    jueves, 5 de marzo de 2020 4:44
  • muchas gracias por la respuesta y pido disculpa por crear el hilo en un lugar equivocado
    jueves, 5 de marzo de 2020 14:16
  • No tienes porque pedir disculpas, ni muchísimo menos. Es posible, que aquí también puedas conseguir la info adecuada, pero es mucho más fácil, encontrarla en los foros más especializados.

    jueves, 5 de marzo de 2020 14:46
  • ok, es que recién me estoy metiendo con bases de datos  y ahora con procedimientos almacenados,... entonces no sabia que había diferencia.... una consulta igual que no tengo nada de claro.... en un procedimiento almacenado... como se ejecuta este? osea se que le hace call. o algo asi. pero mi duda es que basado en la info que deje en mi primer post. si yo ejecuto una query con el insert a la tabla mencionada, este de forma automática ejecuta el procedimiento almacenado?? o como se logra su ejecución ante un insert??

    Saludos

    viernes, 6 de marzo de 2020 0:48
  • Hola Javier:

    el procedure en mySql se ejecuta con un call y no se ejecuta, a menos que lo llames explicitamente. Si tu haces una query que contenga un insert, el procedure no se entera de nada.

    Pero hay un tipo de procedimiento almacenado especial que se llaman triggers, y estos se desencadenan solos cuando se produce, por ejemplo una insercción o una modificacion o un borrado.

    En los triggers puedes manejar lógica del tipo que planteas. Pero tienen un gran problema, que es difícil depurarlos.

    Además lo que ahora puede parecer muy interesante, porque se desencadenan solos, a la larga puede ser una losa muy pesada, porque tú nunca tienes control sobre el código.

    Saludos

    viernes, 6 de marzo de 2020 3:47