Alessandro Guimarães – Oracle Blog

June 17, 2008

Comando SQL Válido

Filed under: banco de dados — Tags: , — agleite @ 8:41 pm

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

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: