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.

Spence
fonte

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.

ausência de pálpebra
fonte
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';
Jeffrey Kemp
fonte
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 
Suresh G
fonte
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!

André não é o santo
fonte
-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.

oualid
fonte
Eu recebo ORA-00942quando tento select * from V$RESERVED_WORDS.
ceving 16/10