A instrução SUBTRACT subtrai um item numérico ou a soma de dois ou mais itens numéricos de um ou mais itens numéricos e armazena o resultado.
Formato1
.------------------. V | >>-SUBTRACT----+-identifier-1-+-+--FROM-------------------------> '-literal-1----' .---------------------------. V | >----identifier-2--+---------+-+--------------------------------> '-ROUNDED-' >--+--------------------------------------------+---------------> '-+----+--SIZE ERROR--imperative-statement-1-' '-ON-' >--+-------------------------------------------------+----------> '-NOT--+----+--SIZE ERROR--imperative-statement-2-' '-ON-' >--+--------------+-------------------------------------------->< '-END-SUBTRACT-'
Todos os identificadores ou literais anteriores a FROM são somados e sua soma é subtraído e armazenados imediatamente no identifier-2. Este processo é repetido para cada ocorrência sucessiva de identifier-2, na ordem da esquerda para a direita em que identifier-2 é especificada.
Formato 2
.------------------. V | >>-SUBTRACT----+-identifier-1-+-+--FROM--+-identifier-2-+-------> '-literal-1----' '-literal-2----' .---------------------------. V | >--GIVING----identifier-3--+---------+-+------------------------> '-ROUNDED-' >--+--------------------------------------------+---------------> '-+----+--SIZE ERROR--imperative-statement-1-' '-ON-' >--+-------------------------------------------------+----------> '-NOT--+----+--SIZE ERROR--imperative-statement-2-' '-ON-' >--+--------------+-------------------------------------------->< '-END-SUBTRACT-'
Todos os identificadores ou literais anteriores a FROM são somados e sua soma é subtraído do identifier-2 ou literal-2. O resultado da subtração é armazenado como o novo valor de cada item de dados referenciado pelo identifier-3.
Formato 3
>>-SUBTRACT--+-CORRESPONDING-+--identifier-1--FROM--------------> '-CORR----------' >--identifier-2--+---------+------------------------------------> '-ROUNDED-' >--+--------------------------------------------+---------------> '-+----+--SIZE ERROR--imperative-statement-1-' '-ON-' >--+-------------------------------------------------+----------> '-NOT--+----+--SIZE ERROR--imperative-statement-2-' '-ON-' >--+--------------+-------------------------------------------->< '-END-SUBTRACT-'
Itens de dados elementares dentro identifier-1 são subtraídos, e os resultados são guardados, os itens de dados elementares correspondentes no interior identifier-2.
Quando a opção de compilador ARITH (COMPAT) está em vigor, a composição de operando pode conter um máximo de 30 dígitos. Quando a opção de compilador ARITH (EXTEND) está em vigor, a composição de operando pode conter um máximo de 31 dígitos.
Para todos os formatos:
identifier
No Formato 1, deve nomear um item de dados numérico elementar.
No Formato 2, deve nomear um item de dados numérico elementar, a menos que o identificador siga a palavra GIVING. Cada identificador que segue a palavra GIVING deve nomear um item de dados elementar numérico ou editado numericamente.
No Formato 3, deve nomear um item de grupo alfanumérico ou um item de grupo nacional.
As seguintes restrições se aplicam aos campos de data:
- No Formato 1, identifier-1 pode especificar no máximo, um campo de data. Se identifier-1 especifica um campo de data, então cada instância do identifier-2 deve especificar um campo de data que é compatível com o campo de data especificado pelo identifier-1. Se identifier-1 não especifica um campo de data e, em seguida identifier-2 pode especificar um ou mais campos de data, sem qualquer restrição em suas cláusulas DATE FORMAT.
- No Formato 2, identifier-1 e identifier-2 pode especificar individualmente no máximo, um campo de data. Se identifier-1 especifica um campo de data, então FROM identifier-2 deve ser um campo de data que é compatível com o campo de data especificado pelo identifier-1. identifier-3 pode especificar um ou mais campos de data. Se identifier-2 especifica um campo de data e identifier-1 não, então cada instância do identificador-3 deve especificar um campo de data que é compatível com o campo de data especificado pelo identificador-2 .
- No Formato 3, se um item dentro de identifier-1 é um campo de data, o item correspondente no identifier-2 deve ser um campo de data compatível.
- Um campo de data no último ano é permitido em um comunicado SUBTRACT apenas como identifier-1 e quando o resultado da subtração é uma non date.
Existem duas etapas para determinar o resultado de uma instrução SUBTRACT que envolve um ou mais campos de data:
- SUBTRACT: determinar o resultado da operação de subtração, conforme descrito em subtração que envolve campos de data.
- STORAGE: determina como o resultado é armazenado no campo de recebimento. (Em Formatos de 1 e 3, o campo de recepção é identifier-2; no Formato 3, o campo de recepção é a doação identifier-3).
literal
Deve ser um literal numérico.
Itens de dados de ponto flutuante e literais podem ser usados em qualquer lugar itens de dados numéricos e literais podem ser especificados.
ROUNDED
Para obter informações sobre a ROUNDED, e por considerações de operando, veja ROUNDED.
SIZE ERROR
Para obter informações sobre as frases erro de tamanho, e por considerações de operando, veja SIZE ERROR.
CORRESPONDING (Formato 3)
Veja CORRESPONDING.
END-SUBTRACT
Este terminador de escopo explícito serve para delimitar o escopo da instrução SUBTRACT. END-SUBTRACT permite que uma instrução SUBTRACT condicional seja aninhada em outra instrução condicional. END-SUBTRACT também pode ser usado com uma instrução SUBTRACT imperativa.