Avalados por :

Como inserir registros em uma tabela chamando um procedimento armazenado: dicas e soluções

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

Olá,

Preciso inserir registros em uma tabela obtendo seus valores ao chamar um procedimento armazenado.

Por exemplo:

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

// TEST_SP retorna registros de duas colunas que desejo inserir em "TESTTABLE".

Se eu executar como mostrado acima, recebo:

SAP DBTech JDBC: [7]: função não suportada

Também tentei

INSERT INTO #tmp
execute test_proc

(o que funciona bem no MS_SQL Server) mas não funciona!

Obrigado antecipadamente,

Dimitris

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

2 Respuestas

0
Cargando...

Prezado Florian,

Muito obrigado pela sua resposta!

Funciona perfeitamente!

Saudações,

Dimitris

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

Usar o procedimento diretamente em uma declaração de inserção não é possível, até onde sei. Mas você tem diferentes opções para lidar com essa situação.

Utilize a opção "with overview" para a declaração de chamada ao procedimento se a estrutura de resultados do seu procedimento coincidir com a tabela de destino.
Se a estrutura de resultados do parâmetro de saída do procedimento coincidir com a tabela de destino, você pode usar a opção "with overview" para a declaração de chamada ao procedimento. Ao fazer isso e passar o nome da tabela de destino para o parâmetro de saída, os dados são inseridos diretamente nessa tabela.

Exemplo (supondo que você tenha uma tabela de destino "MISC"."TARGET_TABLE"):

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

Se a estrutura de resultados do procedimento não coincidir com a estrutura da tabela de destino, você tem várias opções. Algumas delas são brevemente descritas a seguir.

Crie um procedimento envolvente
Crie um procedimento que envolva seu código (chame seu procedimento e armazene o resultado em uma variável de tabela; insira os dados na tabela de destino).

Crie uma função de tabela que envolva a chamada ao seu procedimento
Você pode criar uma função de tabela que envolva a chamada ao seu procedimento e retorne o resultado do procedimento. Em seguida, a função de tabela pode ser chamada usando um select utilizado para a declaração de inserção.

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

Use uma tabela temporária
Enquanto estiver na mesma sessão, você pode usar uma tabela temporária local para armazenar o resultado do procedimento. Em seguida, os dados podem ser selecionados da tabela temporária durante a execução da declaração de inserção.

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);

Você também pode evitar criar a tabela temporária manualmente se passar um valor NULL para o parâmetro de saída do procedimento. Nesse caso, uma tabela temporária é criada automaticamente. O nome da tabela temporária é retornado como resultado do procedimento. Você só precisa determinar o nome da tabela temporária e obter os dados necessários para a inserção.

Saudações,
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?