Olá Keller,
Obrigado por compartilhar a perspectiva.
Na verdade, o que estou fazendo aqui é construir uma API para que nossa equipe possa manipular procedimentos armazenados no HANA. Eles podem usar a API para criar/excluir/chamar procedimentos/tipos de tabela.
Optarei pelo ADBC no início porque aprendi com meu colega que não podemos chamar uma visão CDS com parâmetros de entrada (função de tabela no HANA) dentro de um AMDP. Esse tipo de limitação não existe em um procedimento armazenado puro do HANA. Já que estamos gerando procedimentos de qualquer maneira, parece que um procedimento puro é mais poderoso que um AMDP.
Em relação ao desempenho, já revisei sua resposta neste blog
Desempenho lento no AMDP
. Por uma questão de correção, abrirei o parâmetro IS_LOB ao consumidor para que decidam se o parâmetro precisa de manipulação de LOB.
Há algum outro ponto em que devo ter cuidado ou melhorar no tratamento de procedimentos com ADBC?
Quanto à programação dinâmica, aqui está a questão, estou tendo dificuldades para construir um script SQL nativo para criar/chamar procedimentos armazenados.
-------------------------------------------------------------------------------------------
#1 Para o método create_procedure da minha API, preciso abrir um parâmetro de importação it_param para que o consumidor passe os parâmetros de entrada do procedimento, a fim de gerar um script como o seguinte:
CREATE PROCEDURE
......
O problema aqui é que tenho que converter
TIPO DE DADOS ABAP
para
TIPO DE DADOS HANA
por conta própria. Consultando o blog
Como o SLT mapeia os tipos de dados
. Realizei o trabalho no arquivo anexo
convert-abap-type-to-hana-type.txt
.
Poderia revisar se cometi algum erro no código?
-------------------------------------------------------------------------------------------
#2 Para o método call_procedure (apenas caso de parâmetro escalar) da minha API, assim como no método create, também preciso de parâmetros de entrada com tipo ABAP, mas não quero incomodar o consumidor para passar os parâmetros de saída. Retornarei uma tabela interna com todos os parâmetros de saída escalares. Posso conseguir isso? Parece que não é possível a menos que eu procure os parâmetros em "SYS"."PROCEDURE_PARAMETERS" para obter todos os parâmetros de saída com TIPO DE DADOS HANA e então converter
TIPO DE DADOS HANA para TIPO DE DADOS ABAP por conta própria.
Não tenho certeza se esta é a abordagem correta, poderia compartilhar seus pensamentos sobre isso?
--------------------------------------------------------------------------------------------
#3 Para o método call_procedure_tabular_out (caso de um parâmetro tabular de saída) da minha API. Preciso construir a string de consulta por conta própria conforme mostrado abaixo:
CALL '20170314121212', P_AMOUNT=>1000, outputParams=>?);
Aqui você pode ver que tenho dois parâmetros P_TIMESTAMP que é CHAR e P_AMOUNT que é DECIMAL. Como posso preencher o
valor do parâmetro
'20170314121212'
e 1000? Todos são referências de dados, poderia simplesmente escrever da seguinte forma:
lv_script = |CALL "XXX"."Test"( P_TIMESTAMP=>{ ir_param1->*
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019