Um procedimento é uma sub-rotina sem valor de retorno. Ele pode aceitar parâmetros de entrada do responsável pela chamada e retornar parâmetros de saída para ele.
Os procedimentos são muito semelhantes às funções. A principal diferença entre eles é que, ao contrário das funções, os procedimentos não possuem valor de retorno. Portanto, eles não podem fazer parte de uma expressão e são chamados utilizando a instrução CALL. Os procedimentos normalmente possuem parâmetros de saída.
É possível implementar um procedimento em ESQL (um procedimento interno) ou como um procedimento armazenado em banco de dados (um procedimento externo). O procedimento ESQL deve ser uma única instrução ESQL, embora ela possa ser uma instrução composta, como BEGIN END. Não é possível definir um procedimento dentro de uma instrução EVAL ou de uma função EVAL.
Ao definir um procedimento, forneça um nome a ele. O nome é tratado sem fazer distinção entre maiúsculas e minúsculas (ou seja, pode-se utilizar o nome com qualquer combinação de maiúsculas e minúsculas na instrução). Isso é o oposto do que ocorre com os nomes declarados para esquemas, constantes, variáveis e rótulos, que fazem distinção entre maiúsculas e minúsculas e que devem ser especificados exatamente da maneira como foram declarados.
Uma expressão ESQL pode incluir uma referência a um procedimento em outro esquema do intermediário (definido em um arquivo ESQL em um projeto dependente igual ou diferente). Se desejar utilizar esta técnica, é necessário qualificar totalmente o procedimento ou incluir uma instrução PATH que defina o qualificador. A instrução PATH deve ser codificada no mesmo arquivo ESQL, mas não em um MODULE.
Um procedimento de banco de dados externo é indicado pela palavra-chave EXTERNAL e pelo nome do procedimento externo. Esse procedimento deve ser definido no banco de dados e no intermediário e o nome especificado com a palavra-chave EXTERNAL e o nome do procedimento do banco de dados armazenado devem ser os mesmos, embora os nomes dos parâmetros não precisem corresponder. O nome do procedimento ESQL pode ser diferente do nome externo definido por ele.
Os procedimentos sobrecarregados não são suportados em qualquer banco de dados. (Um procedimento sobrecarregado é um procedimento que tem o mesmo nome de outro procedimento no mesmo esquema de banco de dados, com quantidade diferente de parâmetros ou parâmetros com tipos diferentes). Se o intermediário detectar que um procedimento foi sobrecarregado, ele produz uma exceção.
A resolução dinâmica de nomes de esquema para procedimentos armazenados é suportada; ao definir o procedimento, você deve especificar um caractere curinga para o esquema que é resolvido antes da chamada do procedimento pelo ESQL. Isso é explicado em maior detalhe em Chamando Procedimentos Armazenados.