Utilizando a Instrução CALL para Chamar uma Rotina Gravada pelo Usuário

A instrução ESQL CALL chama uma rotina. Uma rotina é uma função ou um procedimento definido pelo usuário que foi definido por uma das seguintes:
  • Uma instrução CREATE FUNCTION
  • Uma instrução CREATE PROCEDURE
Nota: Assim como funções e procedimentos definidos pelo usuário padrão, você também pode utilizar CALL para invocar funções incorporadas (fornecidas pelo intermediário) e funções SQL definidas pelo usuário. No entanto, a maneira usual de chamar esses tipos de função é simplesmente utilizar seus nomes em expressões.
Você pode utilizar a instrução CALL para invocar uma rotina que tenha sido implementada de uma das seguintes maneiras:
  • ESQL.
  • Java.
  • Como um procedimento armazenado em um banco de dados.
  • Como uma função incorporada (fornecida pelo intermediário). (Mas consulte a nota acima sobre a chamada de funções incorporadas.)

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.

Chamando uma Rotina EQSL

Uma rotina será chamada como um método ESQL se a definição da rotina especificar uma cláusula LANGUAGE do ESQL ou se a rotina for uma função incorporada.

Deve haver uma correspondência uma-a-uma exata, entre a definição e a CALL, dos tipos de dados e direções de cada parâmetro.

Uma rotina ESQL pode retornar qualquer tipo de dados ESQL, exceto Lista e Linha.

Chamando uma Rotina Java

Uma rotina será invocada como um método Java se a definição da rotina especificar uma cláusula LANGUAGE de JAVA.

Deve haver uma correspondência uma-a-uma exata, entre a definição e a CALL, dos tipos de dados e direções de cada parâmetro.

Se o método Java tiver um tipo de retorno nulo, a cláusula INTO não poderá ser utilizada porque não existe nenhum valor para ser retornado.

Uma rotina Java pode retornar qualquer tipo de dados na Tabela de Mapeamento de Tipo de Dados de ESQL para Java. Observe que isso exclui Lista e Linha.

Chamando um Procedimento Armazenado do Banco de Dados

Uma rotina será invocada como um procedimento armazenado do banco de dados se a definição da 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:

  1. Se a instrução CALL especificar uma cláusula IN, o nome da origem de dados, o esquema do banco de dados ou ambos serão retirados da cláusula IN.
  2. Se o nome da origem de dados não for fornecido por uma cláusula IN na instrução CALL, ele será tirado do atributo DATASOURCE do nó.
  3. Se o esquema do banco de dados não for fornecido por uma cláusula IN na instrução CALL, mas for especificado na cláusula EXTERNAL NAME da instrução CREATE PROCEDURE, ele será tirado da cláusula EXTERNAL NAME.
  4. Se nenhum esquema de banco de dados for especificado na cláusula EXTERNAL NAME da instrução CREATE PROCEDURE, o nome do usuário do banco de dados será utilizado como o nome do esquema. Se um procedimento correspondente for localizado, a rotina será chamada.
A utilização principal da cláusula IN da instrução CALL é permitir que a origem de dados, o esquema do banco de dados ou ambos sejam escolhidos dinamicamente no tempo de execução.
Nota: Assim como a cláusula IN da instrução CALL, a cláusula EXTERNAL SCHEMA também permite que o esquema de 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 somente para retrocompatibilidade. Sua utilização em novos aplicativos é reprovada.

Se a rotina chamada tiver quaisquer DYNAMIC RESULT SETS especificados em sua definição, o número de expressões na ParameterList da instrução CALL deverá corresponder ao número de parâmetros reais para a rotina, além do 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.

Conceitos relacionados
Visão Geral do ESQL
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac06009_