A declaração GO TO transfere o controle de uma parte da divisão de procedimento para outra.
Os tipos de instruções GO TO são:
- Incondicional
- Condicional
- Alterado
Incondicional
A declaração incondicional de GO TO transfere o controle para a primeira instrução no parágrafo ou seção identificada por PROCEDURE-NAME, a menos que a instrução GO TO tenha sido modificada por uma instrução ALTER.
>>-GO--+----+--procedure-name-1--------------------------------><
'-TO-'
procedure-name-1
Deve nomear um procedimento ou uma seção na mesma divisão de procedimento como a instrução GO TO.
Quando a instrução GO TO incondicional não é a última instrução em uma seqüência de instruções imperativas, as instruções que seguem o GO TO não são executadas.
Quando um parágrafo é referido por uma instrução ALTER, o parágrafo deve consistir de um nome de parágrafo seguido por uma declaração incondicional ou alterada GO TO.
Condicional
O GO TO condicional para transferências de instrução de controle a uma de uma série de procedimentos, dependendo do valor do item de dados referenciado pelo identificador-1.
.------------------. V | >>-GO--+----+----procedure-name-1-+--DEPENDING--+----+----------> '-TO-' '-ON-' >--identifier-1------------------------------------------------><
procedure-name-1
Deve ser um procedimento ou uma seção na mesma divisão de procedimento como a instrução GO TO. O número de nomes de procedimento não deve exceder 255.
identifier-1
Deve ser um item de dados elementar numérico que seja um inteiro. identificador-1 não pode ser um campo de data de janela.
Se 1, o controle é transferido para a primeira instrução no procedimento chamado pela primeira ocorrência de procedimento-name-1.
Se 2, o controlo é transferido para a primeira instrução no procedimento denominado por a segunda ocorrência do procedimento-nome-1, e assim por diante.
Se o valor do identificador for diferente de um valor dentro do intervalo de 1 a n (onde n é o número de nomes de procedimento especificado nesta instrução GO TO), não ocorre nenhuma transferência de controle. Em vez disso, o controle passa para a próxima instrução na seqüência normal de execução.
Alterado
A instrução GO TO alterada transfere o controle para a primeira instrução do parágrafo nomeado na instrução ALTER.
Não é possível especificar a instrução GO TO alterada da seguinte forma:
- Um programa ou método que tenha o atributo RECURSIVE
- Um programa compilado com a opção compilador THREAD
- Uma instrução ALTER referente ao parágrafo que contém a instrução GO TO alterada deve ser executada antes da instrução GO TO ser executada. Caso contrário, a instrução GO TO funciona como uma instrução CONTINUE.
>>-paragraph-name--.--GO--+----+--.---------------------------->< '-TO-'
Quando uma instrução ALTER se refere a um parágrafo, o parágrafo pode consistir apenas no nome do parágrafo seguido por uma declaração incondicional ou alterada GO TO.
MORE-LABELS
A declaração GO TO MORE-LABELS pode ser especificada somente em um declarativo LABEL.
>>-GO--+----+--MORE-LABELS------------------------------------->< '-TO-'