Avalados por :

Cómo insertar registros en una tabla llamando a un procedimiento almacenado: consejos y soluciones

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 14 Vistas
0
Cargando...

Hola,

Necesito insertar registros en una tabla obteniendo sus valores al llamar a un procedimiento almacenado.

Por ejemplo:

insert into "TESTTABLE" Values ("Código", "Nombre") call "TEST_SP" ();

// TEST_SP devuelve registros de dos columnas que quiero insertar en "TESTTABLE".

Si lo ejecuto como se muestra arriba, obtengo:

SAP DBTech JDBC: [7]: función no compatible

También intenté

INSERT INTO #tmp
execute test_proc

(lo cual funciona bien en MS_SQL Server) ¡pero no funciona!

Gracias de antemano,

Dimitris

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

Estimado Florian,

¡Muchas gracias por tu respuesta!

¡Funciona perfectamente!

Saludos,

Dimitris

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Usar el procedimiento directamente en una declaración de inserción no es posible según mi conocimiento. Pero tienes diferentes opciones para manejar esa situación.

Utiliza la opción "with overview" para la declaración de llamada al procedimiento en caso de que la estructura de resultados de tu procedimiento coincida con la tabla de destino
En caso de que la estructura de resultados del parámetro de salida del procedimiento coincida con la tabla de destino, puedes usar la opción "with overview" para la declaración de llamada al procedimiento. Cuando utilizas esto y pasas el nombre de la tabla de destino al parámetro de salida, los datos se insertan directamente en esa tabla.

Ejemplo (suponiendo que tienes una tabla de destino "MISC"."TARGET_TABLE"):

CALL "MISC"."MY_PROCEDURE"( et_result => "MISC"."TARGET_TABLE") WITH OVERVIEW;

En caso de que la estructura de resultados del procedimiento no coincida con la estructura de la tabla de destino, tienes varias opciones. A continuación se describen brevemente algunas.

Crea un procedimiento envolvente
Crea un procedimiento que envuelva tu código (llama a tu procedimiento y almacena el resultado en una variable de tabla; inserta los datos en la tabla de destino).

Crea una función de tabla que envuelva la llamada a tu procedimiento
Puedes crear una función de tabla que envuelva la llamada a tu procedimiento y devuelva el resultado del procedimiento. Luego, la función de tabla puede ser llamada usando un select utilizado para la declaración de inserción.

INSERT INTO "MISC"."TARGET_TABLE" (COL1, COL2) ( SELECT COL1, COL2 FROM "MISC"."WRAPPER_TABLE_FUNCTION"() );

Usa una tabla temporal
Mientras estés en la misma sesión, puedes usar una tabla temporal local para almacenar el resultado del procedimiento. Luego, los datos se pueden seleccionar de la tabla temporal durante la ejecución de la declaración de inserción.

DROP TABLE #TMP_TAB;
CREATE LOCAL TEMPORARY TABLE #TMP_TAB ( COL1 integer, COL2 integer);
CALL PROCEDURE "MISC"."MY_PROCEDURE" ( et_result => #TMP_TAB) WITH OVERVIEW;
INSERT INTO "MISC"."TARGET_TABLE" (COL1, COL2) ( SELECT COL1, COL2 FROM #TMP_TAB);

También puedes evitar crear la tabla temporal manualmente si pasas un valor NULL al parámetro de salida del procedimiento. En ese caso, se crea automáticamente una tabla temporal. El nombre de la tabla temporal se devuelve como resultado del procedimiento. Solo tienes que determinar el nombre de la tabla temporal y obtener los datos que necesitas para la inserción.

Saludos,
Florian

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?