Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
problema de inserción de datos de variante de copo de nieve: 'problema de nivel experto'

Tengo una mesa en copo de nieve y la estructura de la mesa es como la de abajo.

Datos identificación marca de tiempo
tipo de variante varchar varchar

Estoy insertando estos datos en la tabla.

 let data = { "a":"hi", "b":"i'm the problem" } let id = "id"; let timestamp = "2022-06-29 20:30:44" let data1 = JSON.stringify(data); let data2 = data1.replace(/\'/g, "\\'");

mi consulta de inserción es

`insertar en xyz (datos,id,marca de tiempo) seleccionar parse_json('${datos}'),'${id}','${marca de tiempo}' `

cuando estoy ejecutando la consulta está dando un error. Error de compilación SQL:\nerror de sintaxis línea 2 en la posición 378 inesperado ''\"

el registro que no tiene una comilla simple se inserta correctamente. pero el campo de datos con un valor de comillas simples está dando el error como se mencionó anteriormente. He intentado muchas cosas. Por favor recomiende.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Como no vemos todo el procedimiento, creé uno basado en su pregunta:

 create or replace table xyz (data variant, id varchar, timestamp varchar ); create or replace procedure test_xyz() returns varchar LANGUAGE JAVASCRIPT as $$ let data = { "a":"hi", "b":"i'm the problem" } let id = "id"; let timestamp = "2022-06-29 20:30:44" let data1 = JSON.stringify(data); let data2 = data1.replace(/\'/g, "\\'"); snowflake.createStatement( { sqlText: ` insert into xyz (Data,id,timestamp) select parse_json('${data2}'),'${id}','${timestamp}' ` } ).execute(); $$ ;

Como puede ver, usé ${data2} y funcionó:

 call test_xyz(); select * from xyz; +----------------------------------------+----+---------------------+ | DATA | ID | TIMESTAMP | +----------------------------------------+----+---------------------+ | { "a": "hi", "b": "i'm the problem" } | id | 2022-06-29 20:30:44 | +----------------------------------------+----+---------------------+
about 4 years ago · Juan Pablo Isaza Denunciar

0

Esta función de ayuda de Javascript escapará una cadena para usar como un literal entre comillas simples en una declaración de inserción. Solo debe usarse en situaciones en las que las variables de vinculación no se pueden usar por algún motivo.

 function escapeInsertString(value) { var s = value.replace(/\\/g, "\\\\"); s = s.replace(/'/g, "''" ); s = s.replace(/"/g, '\\"'); return s; }

Puedes cambiar esta línea:

 let data2 = data1.replace(/\'/g, "\\'");

A esto:

 let data2 = escapeInsertString(data1);

Con la función auxiliar agregada al código SP o Node.js, esto funcionará.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda