O Serviço de Integração pode passar uma única linha ao procedimento de transformação personalizada ou um bloco de linhas em uma matriz. Você pode especificar no código do procedimento para especificar se este receberá uma linha ou um bloco de linhas. O desempenho pode aumentar quando o procedimento recebe blocos de linhas:
Você pode diminuir o número de chamadas de função feitas pelo Serviço de Integração e pelo procedimento. O Serviço de Integração e o procedimento chamam as funções de notificação da linha de entrada e de notificação de saída, respectivamente, menos vezes.
Você pode aumentar a localidade do espaço de acesso à memória para os dados.
Você pode gravar o código do procedimento para executar algoritmos em blocos de dados, em vez de em cada linha de dados.
Por padrão, o procedimento recebe uma linha de dados de cada vez. Para receber blocos de linhas, inclua a função INFA_CTSetDataAccessMode() para que o modo de acesso aos dados tenha base em matriz. Quando o modo de acesso aos dados tem base em matriz, use versões de funções de estratégia de linha e de manipulação de dados com base em matriz para acessar e fazer a saída de dados. Quando o modo de acesso a dados é baseado em linha, você deve usar a manipulação de dados baseada em linha, bem como funções de estratégia de linha para acessar e emitir os dados.
Todas as funções com base em matriz usam o prefixo INFA_CTA. Todas as outras funções usam o prefixo INFA_CT.
Use estas etapas para fazer com que o código do procedimento acesse um bloco de linhas:
Chame INFA_CTSetDataAccessMode() durante o processo de inicialização para que o modo de acesso aos dados tenha base em matriz.
Ao criar uma transformação Personalizada passiva, você também pode chamar INFA_CTSetPassThruPort() durante o processo de inicialização, para passar dados para portas de entrada e saída.
Quando o bloco de dados chega ao procedimento de transformação personalizada, o Serviço de Integração chama p_<proc_name>_inputRowNotification() para cada bloco de dados. Execute o restante das etapas dentro dessa função.
Chame INFA_CTAGetNumRows() usando o controle do grupo de entrada na função de notificação da linha de entrada, para descobrir o número de linhas no bloco.
Chame uma da funções INFA_CTAGetData<datatype>() usando o controle da porta de entrada para obter os dados de determinada linha no bloco.
Chame INFA_CTASetData para que as linhas de um bloco saiam.
Antes de chamar INFA_CTOutputNotification(), chame INFA_CTASetNumRows() para informar ao Serviço de Integração o número de linhas no bloco que o procedimento faz sair.