es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Procedimiento MySql para bucle de matriz multidimensional

Cualquier ayuda para la pregunta es muy apreciada.

Tengo una lista de tablas, digamos t1, t2, t3…

Los nombres de las tablas están almacenados en un arreglo.

tname=(“t1″,”t2″,….”tn”)

También tengo parámetros, que podrían ser arreglos de dos dimensiones o arreglos de una dimensión.

p1=( (1,2,3),(3,4,5))
p2=(‘2020-01-01’, ‘2020-02-01′,….’2020-12-01’)

Quiero construir un procedimiento almacenado para aceptar esos parámetros y guardar los resultados en una tabla.

Por ejemplo, llamaré al procedimiento de esta manera.

CALL myproc(tname, p1,p2);

Dentro de myproc, iteraré a través de esos arreglos y ejecutaré procedimientos y almacenaré el resultado en una tabla de dos dimensiones, luego cargaré los resultados en una tabla de base de datos o devolveré los resultados de la matriz de dos dimensiones desde myproc.

Por ejemplo, dentro de myproc, habrá una instrucción SQL como (cadena de pseudo SQL aquí)

/bucle de dos dimensiones/
para i=1 hasta 2
para k=1 hasta 3
/devolver una fila de resultado como una fila de una llamada SQL a continuación/
DROP TABLE IF EXISTS TEMPT;
CREATE TEMPORARY TABLE TEMPT(ID INT UNSIGNED auto_increment primary key, X VARCHAR(24));
INSERT INTO TEMPT(A.x) SELECT A.x FROM tname[i] AS A WHERE A.date=p2[k] AND A.y=p1[i,k];
/Luego insertar la fila de resultado en una tabla T;/
,,,,,,
siguiente k
siguiente i
DROP TABLE IF EXISTS TEMPT;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en MySQL, arrays, bucles, arrays multidimensionales y procedimientos, definitivamente puedo ayudarte con tu pregunta. Según la información que proporcionaste, entiendo que deseas crear un procedimiento almacenado que acepte los parámetros tname, p1 y p2, y luego recorra esos arrays, ejecute procedimientos y almacene los resultados en una tabla array bidimensional o los cargue en una tabla de base de datos.

    Para lograr esto, puedes seguir los siguientes pasos:

    1. Crea el procedimiento almacenado utilizando la instrucción CREATE PROCEDURE. Por ejemplo:

      CREATE PROCEDURE myproc (IN tname VARCHAR(255), IN p1 TEXT, IN p2 TEXT)

    2. Dentro del procedimiento almacenado, puedes declarar variables para almacenar los resultados y recorrer los arrays utilizando bucles FOR.

    3. Utiliza la instrucción SQL que proporcionaste para ejecutar los procedimientos y almacenar los resultados en una tabla temporal. Por ejemplo:

      DROP TABLE IF EXISTS TEMPT;
      CREATE TEMPORARY TABLE TEMPT(ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, X VARCHAR(24));
      INSERT INTO TEMPT(A.x) SELECT A.x FROM tname[i] AS A WHERE A.date=p2[k] AND A.y=p1[i,k];
      

    4. Después de ejecutar la instrucción SQL, puedes insertar la fila de resultado en una tabla o devolver los resultados del array bidimensional desde myproc.
    5. Finalmente, puedes eliminar la tabla temporal utilizando la instrucción DROP TABLE.

    Aquí tienes el código completo de ejemplo para el procedimiento almacenado:

    CREATE PROCEDURE myproc(IN tname VARCHAR(255), IN p1 TEXT, IN p2 TEXT)
    BEGIN
      DECLARE i INT DEFAULT 1;
      DECLARE k INT DEFAULT 1;
      DECLARE result_row VARCHAR(255);
    
      /*Bucle bidimensional*/
      FOR i = 1 TO 2 DO
        FOR k = 1 TO 3 DO
          /*Ejecuta los procedimientos y almacena los resultados en una tabla temporal*/
          DROP TABLE IF EXISTS TEMPT;
          CREATE TEMPORARY TABLE TEMPT(ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, X VARCHAR(24));
          INSERT INTO TEMPT (x) SELECT A.x FROM tname[i] AS A WHERE A.date = p2[k] AND A.y = p1[i,k];
    
          /*Inserta la fila de resultado en una tabla o devuelve el array bidimensional*/
          /*...*/
    
          /*Elimina la tabla temporal*/
          DROP TABLE IF EXISTS TEMPT;
        END FOR;
      END FOR;
    END;
    

    Espero que esto te ayude a construir el procedimiento almacenado que necesitas. No dudes en preguntar si tienes alguna pregunta adicional.

Comments are closed.