Ve este comando :
Por que o comando abaixo, aparentemente invalido fuciona ? Uma vez que não existe coluna ou numero “1.x” . No entanto o comando funciona
SQL> SELECT 1.x
2 FROM dual;
X
———-
1
Pelo header da coluna temos uma dica . O Oracle considerou x um alias. Vamos tirar o “x” e ver o que acontece.
SQL> SELECT 1. FROM DUAL;
1.
———-
1
Funciona como esperado, “1.” é tratado como número (1. = 1.0)
No entanto a pergunta permanece. Como é que o Oracle divide a string “1.x” e decide que “x” é a coluna e “1.” é a parte numerica, considerand-se que não existem espaços entre 1. e X. Você, preguiçoso padwan, poderia responder que as vezes…as vezes.. espaços em branco são opcionais.
Embora esta resposta pareça a melhor – (certamente muito bem vinda em momentos de tensão em salas de aula) – me parece, o que acontece é que o string tokenizer (infelizmente não da pra traduzir ) utilizado pelo Oracle SQL parser , é suficientemente inteligente para não confiar que espaços em branco são delimitadores de token. Talvez até use analise de classes de caracteres para entender onde uma literal termina e o próximo token (como o alias de coluna) começa.
Portanto é possivel escrever um comando SQL válidos sem nenhum espaço em branco. Por exemplo:
SQL> select*from”DUAL”;
D
-
X
SQL> select”DUMMY”FROM”DUAL”;
D
-
X
Bom a informação acima, não tem nenhuma aplicação prática (a não ser que seu teclado esteja quebrado). De qualquer forma ilustra como trabalha internamente e a flexibilidade do Oracle SQL Analisador de Texto.
P.S Muito embora :
SQL> select 1.dummy from “dual”"1″;
select 1.dummy from “dual”"1″
*
ERRO na linha 1:
ORA-03001: recurso não-implementado