| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2006 15:45:40
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
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. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2006 16:41:31
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2006 17:35:28
|
boaglio
Moderador
![[Avatar]](/images/avatar/c0c7c76d30bd3dcaefc96f40275bdc0a.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2006 16:39:03
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/10/2006 17:54:47
|
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2006 09:36:14
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2006 11:17:16
|
boaglio
Moderador
![[Avatar]](/images/avatar/c0c7c76d30bd3dcaefc96f40275bdc0a.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/10/2006 18:39:19
|
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2006 00:52:17
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2006 08:01:09
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/10/2006 09:56:45
|
boaglio
Moderador
![[Avatar]](/images/avatar/c0c7c76d30bd3dcaefc96f40275bdc0a.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/10/2006 20:43:46
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/10/2006 10:19:16
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/10/2006 11:10:25
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/10/2006 12:33:23
|
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
 |
|
|
 |
|
|