Prezado Florian,
Muito obrigado pela sua resposta!
Funciona perfeitamente!
Saudações,
Dimitris
Avalados por :
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
Prezado Florian,
Muito obrigado pela sua resposta!
Funciona perfeitamente!
Saudações,
Dimitris
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
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute