A instrução ESQL CALL chama rotinas que foram criadas e implementadas de diferentes maneiras.
É possível usar CALL para chamar funções integradas (fornecidas pelo intermediário) e funções SQL definidas pelo usuário, geralmente você usaria seus nomes diretamente nas expressões.
Para obter detalhes sobre a sintaxe e os parâmetros da instrução CALL, consulte Instrução CALL. Para obter um exemplo da utilização de CALL, consulte os exemplos em Instrução CREATE PROCEDURE.
Uma rotina é chamada como um método ESQL se a definição da rotina especificar uma cláusula LANGUAGE de ESQL ou se a rotina for uma função integrada. Deve haver uma correspondência exata de um a um dos tipos de dados e direções de cada parâmetro, entre a definição e CALL. Uma rotina ESQL pode retornar qualquer tipo de dados ESQL, exceto Lista e Linha.
Uma rotina é chamada como um método Java se a definição da rotina especificar uma cláusula LANGUAGE de JAVA. Deve haver uma correspondência exata de um a um dos tipos de dados e direções de cada parâmetro, entre a definição e CALL. Se o método Java tiver um tipo de retorno nulo, a cláusula INTO não poderá ser usada porque não existe nenhum valor para retornar.
Uma rotina Java pode retornar qualquer tipo de dados na Tabela de Mapeamento de Tipo de Dados de ESQL para Java, excluindo Lista e Linha.
Uma rotina é chamada como um procedimento armazenado do banco de dados se a definição de rotina tiver uma cláusula LANGUAGE de DATABASE.
Quando uma chamada é feita a um procedimento armazenado do banco de dados, o intermediário procura uma definição (criada pela instrução CREATE PROCEDURE) que corresponde ao nome local do procedimento. O intermediário, em seguida, utiliza a seguinte seqüência para resolver o nome pelo qual o procedimento é conhecido no banco de dados e o esquema do banco de dados ao qual ele pertence:
O principal uso da cláusula IN da instrução CALL é que ela permite que a origem de dados, o esquema do banco de dados ou ambos sejam escolhidos dinamicamente no tempo de execução. (A cláusula EXTERNAL SCHEMA também permite que o esquema do banco de dados que contém o procedimento armazenado seja escolhido dinamicamente, mas não é tão flexível quanto a cláusula IN e é retida apenas para compatibilidade com versões anteriores. Sua utilização em novos aplicativos é obsoleta.)
Se a rotina chamada tiver qualquer DYNAMIC RESULT SETS especificado em sua definição, o número de expressões na ParameterList da instrução CALL deverá corresponder ao número de parâmetros na rotina, mais o número de DYNAMIC RESULT SETS. Por exemplo, se a rotina tiver três parâmetros e dois DYNAMIC RESULT SETS, a instrução CALL deverá transmitir cinco parâmetros para a rotina chamada. Os parâmetros transmitidos para dois DYNAMIC RESULT SETS devem ser parâmetros de lista; ou seja, devem ser referências de campo qualificadas com colchetes de matriz [ ]; por exemplo, Environment.ResultSet1[].
Um procedimento armazenado do banco de dados pode retornar qualquer tipo de dados ESQL, exceto Intervalo, Lista e Linha.