Domingo 19 Mai 2024

A instrução SELECT INTO produz uma tabela de resultados que consiste em no máximo uma linha e atribui os valores nessa linha a variáveis.

Se a tabela estiver vazia, a instrução atribui a SQLCODE +100 e '02000' a SQLSTATE e não atribui valores às variáveis.

Se mais de uma linha satisfaz a condição de pesquisa, o processamento da instrução é encerrado e ocorre um erro.

 

INVOCATION

Essa instrução só pode ser incorporada em um programa aplicativo. É uma instrução executável que não pode ser preparada dinamicamente. Não deve ser especificado no REXX.

 

Autorização

Os privilégios detidos pelo ID de autorização da declaração devem incluir pelo menos uma das seguintes opções:

  • Para cada tabela ou visualização identificada na instrução,
    • O privilégio SELECT na tabela ou exibição, e
    • A autoridade do sistema * EXECUTE na biblioteca que contém a tabela ou exibição
  • Autoridade administrativa

 

Sintaxe

                        .-,--------.
                        V          |
>>-select-clause--INTO----variable-+---------------------------->
 
>--from-clause--+--------------+--+-----------------+--+---------------+-->
                '-where-clause-'  '-group-by-clause-'  '-having-clause-'
 
                                               (1)
>--+-----------------+--+--------------------+-------+------------------+-><
   '-order-by-clause-'  '-fetch-first-clause-'       '-isolation-clause-'
 

 

notas:

Apenas uma linha pode ser especificada no fetch-first-clause.

 

Descrição

A tabela de resultados é derivado através da avaliação do ISOLATION, FROM, WHERE, GROUP BY, HAVING, ORDER BY, FETCH FIRST, e SELECT, nesta ordem.

 

INTO variável

Identifica uma ou mais estruturas de host ou variáveis ​​que devem ser declaradas no programa de acordo com as regras para declarar estruturas e variáveis ​​de host. Na forma operacional da cláusula INTO, uma referência a uma estrutura de host é substituída por uma referência a cada uma de suas variáveis. O primeiro valor na linha do resultado é atribuído à primeira variável na lista, o segundo valor à segunda variável e assim por diante. O tipo de dados de cada variável deve ser compatível com sua coluna correspondente.

 

Nota:

Atribuição de variável: Cada atribuição a uma variável é realizada de acordo com as regras de atribuição de recuperação descritos em Atribuições e comparações. Se o número de variáveis ​​for menor que o número de valores na linha, um aviso SQL (SQLSTATE 01503) é retornado (e o campo SQLWARN3 do SQLCA é definido como 'W'). Observe que não há nenhum aviso se houver mais variáveis ​​do que o número de colunas de resultado. Se um valor for nulo, uma variável de indicador deve ser fornecida para esse valor.

Se a variável especificada é caractere e não é grande o suficiente para conter o resultado, um aviso (SQLSTATE 01004) é retornado (e 'W' é atribuído a SQLWARN1 no SQLCA). O comprimento real do resultado pode ser retornado na variável de indicador associada à variável, se for fornecida uma variável de indicador. Para mais informações, consulte Referências a variáveis .

Se ocorrer um erro de atribuição, o valor dessa variável e quaisquer variáveis ​​a seguir é imprevisível. Todos os valores que já foram atribuídos a variáveis ​​permanecem atribuídos.

Várias atribuições: Se mais de uma variável é especificado na cláusula INTO, a consulta é completamente avaliado antes as atribuições são executadas. Assim, as referências a uma variável da lista de seleção são sempre o valor da variável antes de qualquer atribuição na instrução SELECT INTO.

Tabela de resultados vazio: Se a tabela de resultados está vazio, a declaração atribui '02000' para a variável SQLSTATE e não atribuir valores às variáveis.

Tabelas de resultados com mais de uma linha: Se mais de uma linha satisfaz a condição de pesquisa, processamento de declaração é encerrado e um erro é retornado (SQLSTATE 21000). Se ocorrer um erro porque a tabela de resultados tem mais de uma linha, os valores podem ou não ser atribuídos às variáveis. Se os valores forem atribuídos às variáveis, a linha que é a origem dos valores é indefinida e não previsível.

O resultado da avaliação considerações coluna: Quando um valor de tempo é seleccionado, se o formato ISO, EUR ou JIS é usado, o comprimento da variável não deve ser inferior a 5. Se o comprimento é de 5, 6 ou 7, a parte segundo Do tempo é omitido do resultado, um aviso (SQLSTATE 01004) é retornado (e 'W' é atribuído a SQLWARN1 no SQLCA). Neste caso, a parte de segundos do tempo é atribuída à variável de indicador se um for fornecido e, se o comprimento for 6 ou 7, preenchimento em branco ocorre para que o valor seja uma representação de cadeia válida de um tempo.

Se ocorrer um erro ao avaliar uma coluna de resultado na lista SELECT de uma instrução SELECT INTO, como resultado de uma expressão aritmética (como divisão por zero ou overflow) ou um erro de conversão numérica ou de caracteres, o resultado é o valor nulo . Como em qualquer outro caso de um valor nulo, uma variável de indicador deve ser fornecida. O valor da variável é indefinido. Neste caso, no entanto, a variável de indicador é definida para o valor de -2. O processamento da instrução continua e um aviso é retornado. Se uma variável de indicador não for fornecida, um erro é retornado e não mais valores são atribuídos a variáveis. É possível que alguns valores já tenham sido atribuídos a variáveis ​​e permanecerão atribuídos quando o erro for retornado.

 

Exemplos:

Usando uma instrução programa COBOL, coloque o salário máximo (SALARY) da tabela EMPLOYEE para a variável do host MAX-SALARY (DECIMAL (9,2)).

   EXEC SQL  SELECT MAX(SALARY)
               INTO :MAX-SALARY
               FROM EMPLOYEE WITH CS
   END-EXEC.