16 de abr. de 2021

Literais

Literais


    Quando falamos sobre um valor literal em uma consulta de banco de dados estamos nos referindo há um valor fixo, isso significa que esse valor se repetirá em todas as linhas retornadas pela consulta. Temos 4 tipos de literais textos, numéricos, datas e intervalos, abaixo alguns exemplos do uso, note que embora o valor dentro do literal pareça igual nas colunas "Número" e "Caractere" uma o valor 101 é exibido em formato numérico enquanto na outra em formato de sequência de caracteres, essa indicação é facilmente identificada através do alinhamento dos valores dentro da coluna.

Uso de literais em SQL




Texto Literal

    Textos podem ser utilizados como literais de maneira bem simples basta incluir os caracteres entre aspas simples, podendo receber um ALIAS, caso o alias seja omitido o título da coluna será o valor utilizado no literal excluindo os espaços.
String como literal no SQL
    Quando há necessidade de incluir aspas no texto que será exibido no literal é necessário fazer a indicação de um delimitador alternativo chamado de quote_delimiter que basicamente é a substituição da delimitação através de aspas simples por outra indicada podendo ser (), {}, [] ou <>. A letra 'Q' no delimitador pode ser maiúscula ou minúscula, e as símbolos usados como delimitador podem ser incluídos dentro do literal. Há ainda a possibilidade de duplicar as aspas para indicar que a mesma está sendo utilizada dentro do literal. Abaixo exemplos de uso dos delimitadores.

    O Oracle permite até 4000 bytes em um único literal, podendo ser 32767 caso o parâmetro MAX_STRING_SIZE esteja com o valor igual a EXTENDED.

Número Literal

    Diferente dos caracteres, números não precisam de aspas simples ( ' ) para informar que são literais, basta incluí-los na consulta, mas assim como os caracteres literais, os números literais também tem suas particularidades.
    Na imagem abaixo, podemos ver formas diferentes de usar literais numéricos. Vale destacar que para números inteiros positivos não é necessário utilizar o sinal de mais ( + ) e que quando se usa casas decimais o limite é de 38 dígitos. Para que o retorno seja no formato BINARY_FLOAT devemos utilizar 'f' após o número e no caso de DOUBLE_FLOAT devemos utilizar 'd' enquanto a letra 'e' simboliza uma notação científica.


    Ao utilizar literais com números devemos ter cuidado quanto ao separador. Para verificar qual o padrão está definido podemos realizar uma consulta e verificar como está definida a parametrização para a sessão ou para o banco de dados através das consultas abaixo:

        select * from nls_session_parameters
        where parameter = 'NLS_NUMERIC_CHARACTERS';

        select * from nls_database_parameters
        where parameter = 'NLS_NUMERIC_CHARACTERS';



    No exemplo abaixo, temos 3 expressões que deveriam ter o mesmo resultado, mas por erro ao escrever a consulta não traz o resultado esperado. Quando o literal utilizado for do tipo numérico devemos utilizar o ponto ( . ) como separador das casas decimais, caso for utilizado a vírgula ( , ) como separador o literal deve ser passado como caractere, ou seja, dentro de aspas simples ( ' ). Caso o separador seja a vírgula e não esteja dentre de aspas simples o banco de dados irá identificar a vírgula como separador de colunas conforme exemplo abaixo.



Data e Horário Literal

    Para os literais de datas é possível informa-los como texto ou utilizar a função TO_DATE e realizar a conversão para formato de data, ou ainda utilizando a função SYSDATE ou SYSTIMESTAMP, sendo ainda permitido efetuar operações com as funções.


    Para identificar o formato de datas utilizado pelo banco de dados, basta realizar uma consulta em NLS_DATABASE_PARAMETERS procurando pelo parâmetro NLS_DATE_FORMAT.


   Caso o horário seja omitido em um literal de data e hora, a hora será interpretada como '00:00:00' ou '12:00:00' dependendo do padrão de horário ser 24 horas ou 12 horas.
    Da mesma maneira, que podemos utilizar as datas, podemos utilizar o formato timestamp como literal, inclusive utilizando as variantes de local time zone ou com um time zone específico.


Intervalo Literal

    Os intervalos especificam períodos de tempo podendo ser anos e meses ou dias, horas, minutos e segundos, de acordo com o tipo de dado utilizado YEAR TO MONTH ou DAY TO MINUTE, conforme visto aqui e também podemos utilizar literais com os intervalos para especificar esses períodos. Nesse tipo de literal informamos 1 ou 2 campos, onde o primeiro é a maior unidade de medida e o segundo a menor unidade de medida, por exemplo, ao passar um literal '123-2' para o tipo YEAR TO MONTH, estamos dizendo que temos 123 anos e 2 meses. 
    Abaixo exemplos do uso do intervalo com anos e meses, nos exemplos podemos notar o uso dos intervalos literais, como a precisão para anos é de 2, precisamos informar a precisão nos casos dos literais maiores que 2 casas, no caso dos mesmo o padrão é 3. no caso dos literais '123-9' estamos é necessário a utilização do year(3) to month enquanto nos outros podemos apenas informar year ou month.

    Lembrando que caso o literal informado não esteja no padrão esperado ou estoure o tamanho da precisão a consulta não irá executar retornando um erro.

    Da mesma maneira, podemos utilizar os literais para
DAY TO MINUTE e suas partes. Podendo utilizar apenas uma parte ou mais de uma parte, desde que respeitado o formato necessário.




    O uso de intervalos literais costuma ser um tema recorrente nas provas de certificação 1Z0-071, por isso deve ser um tema estudado e testado bastante.



Fonte:


Nenhum comentário:

Postar um comentário