Oracle - Mais do que 30 caracteres nos identificadores. Eh possivel?  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

Pessoal,

Estou migrando algumas tabelas de MySQL/PostgreSQL para Oracle e me deparei com uma limitacao estranha (IMHO) do Oracle.

Nao eh possivel criar identificadores com mais do que 30 caracteres. Por identificador, entenda-se nome de tabela, coluna, indice, etc.

O erro eh bem simples:

ORA-00972: identifier is too long.


Procurando encontrei varias referencias sobre esse erro... nada sobre como alterar essa configuracao - apenas variacoes de:

Cause: The name of a schema object exceeds 30 characters. Schema objects are tables, clusters, views, indexes, synonyms, tablespaces, and usernames.

Action: Shorten the name to 30 characters or less.


E a pergunta fatidica: realmente nao ha como contornar essa limitacao exceto diminuindo o tamanho dos identificadores? E se essa for a saida, alguem mais acha isso ridiculo tratando-se de um produto como Oracle?


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

eu acho que tu tem que ser mais preguiçoso ...
ond ja se viu, ter que escrever uma missa pra referenciar alguma coisa

mas mesmo assim, concordo que não deveria haver este limite ...

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
boaglio
Moderador
[Avatar]

Membro desde: 09/09/2002 21:23:39
Mensagens: 1865
Localização: Sampa City
Offline


Esse é um infeliz legado que as bases de dados Oracle levam...

Até hoje existe essa neura: "escreva um nome pequeno pois é mais rápido". Lá pra época do Oracle7 era assim, hoje não é mais.

Realmente é uma limitação esquisita, já que internamente o Oracle trabalha com o OBJECT_ID e não com o OBJECT_NAME.


 

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de Java via MP!
[WWW]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

Pois eh... sobre usar menos caracteres - o problema eh a palavra "migracao".

Depois que descobri que uma string vazia eh tratada como NULL no Oracle e que nao eh possivel ter mais de uma coluna LONG por tabela (porque cargas d'agua nao existe um tipo simples, facil e direto para textos longos no Oracle, como o TEXT do PostgreSQL?), essa dos 30 caracteres virou fichinha.


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
fabio.patricio
GUJ Master

Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline

kuchma wrote:Depois que descobri que uma string vazia eh tratada como NULL no Oracle e que nao eh possivel ter mais de uma coluna LONG por tabela (porque cargas d'agua nao existe um tipo simples, facil e direto para textos longos no Oracle, como o TEXT do PostgreSQL?), essa dos 30 caracteres virou fichinha.


CLOB?

O teu problema parece se o legado mesmo. Que versao do Oracle é isso ai?

]['s

Fabio Patricio
http://blog.wansoft.com.br

[WWW] [MSN] [ICQ]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

fabgp2001 wrote:CLOB?

O teu problema parece se o legado mesmo. Que versao do Oracle é isso ai?


Oi - a versao eh 10g, ou seja, a mais atual. Fiquei assustado ao perceber a limitacao de 30 caracteres. Mas ja passou.

Sobre o CLOB: obrigado pela dica, vou investigar.


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
boaglio
Moderador
[Avatar]

Membro desde: 09/09/2002 21:23:39
Mensagens: 1865
Localização: Sampa City
Offline

kuchma wrote:
Sobre o CLOB: obrigado pela dica, vou investigar.


O CLOB é a maneira viável de armazenar informação de texto no Oracle com mais de 4000 caracteres (menos que isso use Varchar2).

LOB significa Large Objects, existe o CLOB que substitui o LONG, o BLOG (Binary LOB) que substitui o LONG RAW e o NCLOB para textos usando o alfabeto árabe ou japonês.

Ele possui inúmeras vantagens em cima do tipo LONG:

long é antigo (do Oracle7), só existe para manter compatibilidade
só pode ter uma coluna long por tabela, CLOB pode ter quantas vc quiser
long o acesso sempre é sequencial, com CLOB você pode acessar a informação por deslocamento (existe uma package só pra isso: DBMS_LOB)
não há problemas de trabalhar com triggers com CLOB



 

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de Java via MP!
[WWW]
fabio.patricio
GUJ Master

Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline

boaglio wrote: não há problemas de trabalhar com triggers com CLOB


Passei por esse problema hoje. Fiz um POG pra resolver o problema.

]['s

Fabio Patricio
http://blog.wansoft.com.br

[WWW] [MSN] [ICQ]
ZehOliveira
GUJ Ranger

Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline

Mas não há nenhuma macumba mesmo para colocar identificadores com mais de 30 caracteres?
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

boaglio wrote:O CLOB é a maneira viável de armazenar informação de texto no Oracle com mais de 4000 caracteres (menos que isso use Varchar2).


Com CLOB da pra trabalhar normalmente como se a coluna fosse de texto (set/getString no JDBC, tipo String no Hibernate, etc) ou eh necessario alguma precaucao especial? (nao, ainda nao testei isso )


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
boaglio
Moderador
[Avatar]

Membro desde: 09/09/2002 21:23:39
Mensagens: 1865
Localização: Sampa City
Offline

kuchma wrote:
Com CLOB da pra trabalhar normalmente como se a coluna fosse de texto (set/getString no JDBC, tipo String no Hibernate, etc) ou eh necessario alguma precaucao especial? (nao, ainda nao testei isso )


Acredito que sim, mas nunca fiz isso com Java, só com PL/SQL.

Pelo FAQ funciona.

Em PL/SQL aqui tem bons exemplos.


 

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de Java via MP!
[WWW]
shyde
Smalltalk

Membro desde: 17/10/2006 20:42:16
Mensagens: 3
Offline

Olá pessoal

E como eu poderia converter um campo já criado (e com dados do tipo texto) do tipo LONG para o tipo CLOB?
Alguém saberia?

Abraços
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

shyde wrote:E como eu poderia converter um campo já criado (e com dados do tipo texto) do tipo LONG para o tipo CLOB?
Alguém saberia?


Sim - depois que o LONG nao teve mais jeito, eu fiz isso. Mudei para CLOB. Claro, nao vou garantir pra voce que vai funcionar na tua tabela, um backupzinho antes faz bem, soh pra garantir.

Apenas adicionando outra informacao: Hibernate trabalhou legal com o CLOB, como um String "normal". Nao tive oportunidade de testar com JDBC ainda.


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
shyde
Smalltalk

Membro desde: 17/10/2006 20:42:16
Mensagens: 3
Offline

kuchma wrote:
Sim - depois que o LONG nao teve mais jeito, eu fiz isso. Mudei para CLOB. Claro, nao vou garantir pra voce que vai funcionar na tua tabela, um backupzinho antes faz bem, soh pra garantir.


E como vc fez? Poderia me passar?
Estou com graves problemas em converter os dados na coluna para varchar2.
Abraços

fabio.patricio
GUJ Master

Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline

Olá,

Com JDBC nao da pra usar getString direto. Se for BLOB tu usa getBlog e se for CLOB tem que usar getBinaryStream.

]['s

Fabio Patricio
http://blog.wansoft.com.br

[WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team