Como escapar de uma palavra reservada no Oracle?


134

No TSQL eu poderia usar algo como Select [table] from tablenamepara selecionar uma coluna chamada "tabela".

Como faço para palavras reservadas no oracle?

Edit: Eu tentei colchetes, aspas duplas, aspas simples e aspas, eles não funcionam ...

Como esclarecimento adicional, tenho uma coluna que alguém nomeou comentário. Como esta é uma palavra reservada, oracle está jogando uma cambalhota tentando selecionar com ela, falhando ao analisar a consulta. Eu tentei Selecione "comment" no tablename, mas não funcionou. Vou verificar o caso e voltar.


Respostas:


195

Em uma pesquisa rápida, o Oracle parece usar aspas duplas ( "por exemplo "table") e, aparentemente, exige o caso correto - enquanto, para qualquer pessoa interessada, o MySQL usa o backticks (`), exceto quando definido para usar aspas duplas para compatibilidade.


2
Marquei você porque tentei escapar da palavra usando aspas duplas e não funcionou.
Spence

13
Por padrão, o Oracle fará a cópia de qualquer identificador. Portanto, se você precisar de caracteres minúsculos ou caracteres especiais, ou o identificador for uma palavra reservada da Oracle, ela deverá ser colocada entre aspas duplas. Como as aspas duplas preservam maiúsculas e minúsculas, o identificador também precisa ser o caso correto.
Metro

Criei uma tabela com um campo "alias" usando o SQL Developer v4 atingindo um banco de dados Oracle 11g Release 2 Express. Meu select funcionou quando escrevi "ALIAS" em vez de alias.
11336 Broken_Window

Não funcionando para gatilhos, tente criar um gatilho para uma tabela com um nome que viole o ORA-30507 (por exemplo, DATABASE).
Fleuv 29/05/19

Experimente em maiúsculas "TABLE".
RSHAP 14/08/18

34

O Oracle normalmente requer aspas duplas para delimitar o nome dos identificadores nas instruções SQL, por exemplo

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

No entanto, permite graciosamente omitir aspas duplas; nesse caso, converte silenciosamente o identificador em maiúsculas:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

é convertido internamente para algo como:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

aspas duplas funcionavam no oracle quando eu tinha a palavra-chave como um dos nomes da coluna.

por exemplo:

select t."size" from table t 

3

O Oracle usa aspas duplas, mas você provavelmente precisará colocar o nome do objeto em maiúsculas, por exemplo, "TABLE". Por padrão, se você criar um objeto sem aspas duplas, por exemplo,

CREATE TABLE table AS ...

O Oracle criaria o objeto como maiúscula . No entanto, a referência não diferencia maiúsculas de minúsculas, a menos que você use aspas duplas!


-8

você precisa renomear a coluna para outro nome porque TABLEé reservado pelo Oracle.

Você pode ver todas as palavras reservadas do Oracle na visualização oracle V$RESERVED_WORDS.


Eu recebo ORA-00942quando tento select * from V$RESERVED_WORDS.
ceving 16/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.