Create an array in PL / SQL of MySQL

1

I am trying to create an array in MySQL as it is done in Oracle for a procedure ( procedure ), but I can not get it. With this code I am trying:

# .... Código .... #

DECLARE

   type array_letras IS VARRAY(6) OF VARCHAR(1);
   letra array_letras;

BEGIN

   letra := array_letras('A', 'B', 'C', 'D', 'E');

# .... Código .... #
    
asked by dddenis 23.04.2016 в 17:52
source

1 answer

0

Mysql does not support arrays, however you can make an arrangement similar to Json by separating the values by a character.

CREATE DEFINER='root'@'localhost' PROCEDURE '_prueba_sp_array'(
	IN 'p_cadena' TEXT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare separador char(1);
declare tamano_separador int;
declare valor_ind varchar(11);
declare tamano_ind_x int;
declare cadena_restante varchar(255);
#establecemos separador
set separador = ',';
set tamano_separador = length(separador);

REPEAT
#evaluamos si cadena restante es nulo, es decir: para el primer valor se "isnull" y para los demas "else"
IF isnull(cadena_restante) THEN
	#extraemos el primer valor de la cadena proporcionada
	set valor_ind = substring_index(p_cadena, separador, 1);
	#contamos cuantos caracteres tiene el valor extraido (izq a derecha)
	set tamano_ind_x = length(valor_ind);
	#definimos la cadena que queda (saltandonos los valores que ya tomamos) es decir, el individual1 + separador +1.
	set cadena_restante = substring(p_cadena,(tamano_separador+tamano_ind_x+1),length(p_cadena));
ELSE
	#extraemos el primer valor de la cadena dada por parametro
	set valor_ind = substring_index(cadena_restante, separador, 1);
	#contamos cuantos caracteres tiene el valor extraido (izq a derecha)
	set tamano_ind_x = length(valor_ind);
	#definimos la cadena que queda (saltandonos los valores que ya tomamos) es decir, el individual1 + separador +1.
	set cadena_restante = substring(cadena_restante,(tamano_separador+tamano_ind_x+1),length(p_cadena));
END IF;
#aca debe ir codigo que actualiza los registros
#select/insert u cualquier operacion que desees operar con el arreglo;

until length(cadena_restante) = 0
END REPEAT;

END

Then from your program you should only call the stored procedure in this way:

CALL '_prueba_sp_array'('id1,id2,id3,id4,id5')

The drawback would be that you can only pass a "column".

    
answered by 16.05.2018 / 01:59
source