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.

Sintaxis de entrada inválida para el tipo entero: “(2,2)” con tipo de dato compuesto mientras se ejecuta la función.

begin;
crear tipo public.ltree como (a int, b int);
crear  tabla public.parent_tree(parent_id int,l_tree ltree);
insertar en public.parent_tree valores(1,(2,2)),(2,(1,2)),(3, (1,28));
commit;

Intentando replicar la solución en esta respuesta:
– https://stackoverflow.com/questions/22656716/format-specifier-for-integer-variable

Para una función con tipo compuesto:

CREAR O REEMPLAZAR FUNCIÓN public.get_parent_ltree
            (_parent_id int, tbl_name regclass , OUT _l_tree ltree)
  LENGUAJE plpgsql COMO
$func$
BEGIN
   EJECUTAR formato('SELECT l_tree FROM %s WHERE parent_id = $1', tbl_name)
   INTO  _l_tree
   USING _parent_id;
END
$func$;

La consulta efectiva ejecutada:

select l_tree from parent_tree where parent_id = 1;

Ejecutando la función:

select get_parent_ltree(1,'parent_tree');
select get_parent_ltree(1,'public.parent_tree');

Obtengo este error:

none
ERROR: sintaxis de entrada no válida para tipo integer: "(2,2)"
CONTEXT: función PL/pgSQL get_parent_ltree(integer,regclass) línea 3 en EXECUTE

Contexto de la línea 3:

line3 pic

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema con la sintaxis de entrada del tipo entero. Específicamente, se hace referencia al valor “(2,2)”, que no es un formato entero válido. Esto probablemente se debe a que el tipo “ltree” es un tipo compuesto que consta de dos valores enteros.

    Para resolver este problema, es necesario modificar la instrucción SELECT dentro de la función para hacer referencia a los componentes individuales del tipo ltree. Por ejemplo:

    EXECUTE format('SELECT l_tree.a, l_tree.b FROM %s WHERE parent_id = $1', tbl_name)
    INTO _l_tree
    USING _parent_id;
    

    Esta instrucción SELECT actualizada extraerá los componentes enteros individuales del tipo ltree y los asignará al parámetro OUT _l_tree.

    Una vez realizada esta modificación, debería poder ejecutar la función sin que se produzca el error.

Comments are closed.