A instrução RETURN encerra o processamento. O que acontece em seguida depende do contexto de programação no qual a instrução RETURN é emitida.
Função Main
Nó | RETURN TRUE; | RETURN FALSE; | RETURN UNKNOWN (se tipo BOOLEAN) ou RETURN NULL; | RETURN; |
Compute | Propagar mensagem para terminal Out. | Parar propagação | Parar propagação | Falha de implementação (BIP2912E: Incompatibilidade de tipo em RETURN) |
Database | Propagar mensagem para terminal Out. | Parar propagação | Parar propagação | Falha de implementação (BIP2912E: Incompatibilidade de tipo em RETURN) |
Filter | Propagar mensagem para terminal Verdadeiro | Propagar mensagem para terminal Falso | Propagar mensagem para terminal Desconhecido | Falha de implementação (BIP2912E: Incompatibilidade de tipo em RETURN) |
Funções Definidas pelo Usuário e Procedimentos
Quando utilizada em uma função ou um procedimento, a instrução RETURN pára o processamento dessa função e retorna o controla para a expressão de chamada. A expression, que deverá ser estar presente se a função ou o procedimento tiver sido declarado com uma cláusula RETURNS, é avaliada e age como o valor de retorno da função. O tipo de dados do valor retornado deve ser o mesmo da instrução da função. A tabela a seguir descreve as diferenças entre a instrução RETURN quando utilizada em funções definidas pelo usuário e procedimentos.
RETURN expression; | RETURN NULL; (ou retornar expression que é avaliada para NULL) | RETURN; | Nenhuma instrução RETURN | |
Função definida pelo usuário ou procedimento com uma cláusula RETURNS | Retorna o controle para a expressão de chamada com o valor de expression | Retorna o controle para a expressão de chamada com NULL | Falha de implementação (BIP2912E: Incompatibilidade de tipo em RETURN) | Retorna o controle para a expressão de chamada com NULL depois que todas as instruções na função ou no procedimento tiverem sido executadas |
Função definida pelo usuário ou procedimento sem uma cláusula RETURNS | Falha de implementação (BIP2401E: Erro de sintaxe: esperado; mas localizado expression) | Falha de implementação (BIP2401E: Erro de sintaxe: esperado; mas localizado NULL) | Retorna o controle para a expressão de chamada | Retorna o controle para a expressão de chamada depois que todas as instruções na função ou no procedimento tiverem sido executadas |
A instrução RETURN deve ser utilizada no corpo da função ou do procedimento que possui a instrução RETURNS em sua declaração. Essa função pode ser chamada utilizando a instrução CALL ... INTO. A instrução RETURNS fornece o tipo de dados que a função ou o procedimento retorna para a Instrução CALL. A instrução CALL ... INTO especifica a variável à qual o valor de retorno está designado. O exemplo neste tópico mostra como as instruções RETURNS e CALL ... INTO são utilizadas juntas para designar a instrução de retorno. Se você utilizar a instrução CALL ... INTO para chamar uma função ou um procedimento que não possui uma instrução RETURNS declarada, uma mensagem de erro BIP2912E será gerada.
CREATE FILTER MODULE ProcessOrder CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN DECLARE SpecialOrder BOOLEAN; SET OutputRoot.MQMD = InputRoot.MQMD; CALL IsBulkOrder(InputRoot.XMLNS.Invoice.Purchases) INTO SpecialOrder; -- -- processamento adicional poderia ser inserido aqui -- antes de rotear o pedido para o terminal apropriado -- RETURN SpecialOrder; END; CREATE FUNCTION IsBulkOrder (P1 REFERENCE) RETURNS BOOLEAN BEGIN -- Declarar e inicializar variáveis-- DECLARE a INT 1; DECLARE PriceTotal FLOAT 0.0; DECLARE NumItems INT 0; DECLARE iroot REFERENCE TO P1; -- Calcule o valor do pedido, entretanto se esta for uma compra em massa, o -- -- pedido precisará ser tratado de forma diferente (oferecido desconto), para que seja retornado TRUE -- -- ou FALSE dependendo do tamanho do pedido -- WHILE a <= CARDINALITY(iroot.Item[]) DO SET NumItems = NumItems + iroot.Item[a].Quantity; SET PriceTotal = PriceTotal + iroot.Item[a].UnitPrice; SET a = a + 1; END WHILE; RETURN (PriceTotal/NumItems > 42); END; END MODULE;No exemplo, se o preço médio de itens for maior que 42, será retornado TRUE; de outra maneira, será retornado FALSE. Assim, um nó Filter pode rotear mensagens que descrevem itens dispendiosos em um caminho diferente para mensagens que descrevem itens baratos. A partir do exemplo, a instrução CALL IsBulkOrder(InputRoot.XMLNS.Invoice.Purchases) INTO SpecialOrder; também pode ser gravada como SpecialOrder = IsBulkOrder(InputRoot.XMLNS.Invoice.Purchases);
Se você estiver utilizando a instrução PROPAGATE em seu nó, é importante utilizar um RETURN FALSE; para evitar a propagação automática da mensagem para o próximo nó no fluxo de mensagens. Consulte Instrução PROPAGATE para obter um exemplo de como evitar a propagação implícita no final do processamento em um nó Compute.