RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico Genivaldo Silva
Oi, Anderson,
Grato pela atenção.
 
 
 
Esqueci de mencionar que a tabela que tem o campo LONG foi herdada do banco
9i.
Agora, eu tenho informações nessa coluna, porém não consigo listá-las num
select.
 
Isso não é possível?
 
Genivaldo
 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Anderson
Enviada em: terça-feira, 8 de agosto de 2006 09:04
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: Duvida Select


Na versão 10g não há o type LONG, apenas as variações do type LOB.

É possível fazer agumas operações de select simples nestes campos, 
mas a manipulação destes types é feita por meio da package DBMS_LOB.



--- Em oracle_br@yahoogrupos.com.br, Genivaldo Silva [EMAIL PROTECTED] 
escreveu

 
 
 Pessoal,
 
 Tenho um banco na versão 10g (10.1.0.5.0). Gostaria de saber se 
nessa versão
 eu consigo fazer selects em campos do tipo LONG? Se sim, como 
concatenar
 valores a ele? Pois tenho uma versão do SQL Navigator 3 que mostra o
 conteúdo desse campo no proprio select, enquanto a versão 5 não 
mostra. Mas
 quando tento trabalhar esse campo fazer uma concatenação, por 
exemplo, me
 é retornado um erro de tipos inconsistêntes (ORA-932).
 
 Alguem pode me ajudar?
 
 Genivaldo
 
 
 [As partes desta mensagem que não continham texto foram removidas]






 


[As partes desta mensagem que não continham texto foram removidas]



--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o 
link do mesmo para evitar trafego(pedidos) desnecessário. 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 





RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico Genivaldo Silva
 
Chiappa,
 
Foi o que fiz aqui...
Enquanto aguardava a resposta, tentei jogar o valor em variáveis de depois
manipular.
 
Grato pela atenção/aula!!
 
Genivaldo

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: terça-feira, 8 de agosto de 2006 09:42
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: Duvida Select


Anderson, va verdade na 10g o LONG não é mais recomendado, mas que o 
datatype LONG existe e FUNCIONA é claro que sim, pense na enorme 
quantidade de apps legadas que iam quebrar se não funcionasse... 
Genivaldo, operações como concatenação, funcs de strings, etc, 
funciona SIM em LONGs, mas (óbvio) dentro dos limites de strings do 
datatype character de cada linguagem (4000 bytes na linguagem SQL, 
cerca de 32 kb no PL/SQL), cfrme :

SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 09:24:53 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining 
options

[EMAIL PROTECTED]:SQLcreate table TAB_LONG(c1 number, c2 long);

Tabela criada.


[EMAIL PROTECTED]:SQLinsert into TAB_LONG values(1, 'A' || lpad('*', 
3999, '#'));

1 linha criada.

== OK, 4000 bytes é o tamanho de strings máximo pra linguagem SQL 
cfrme documentado... Vamos tentar botar mais :

[EMAIL PROTECTED]:SQLinsert into TAB_LONG values(2, 'B' || lpad('*', 
32000, '#'));
insert into TAB_LONG values(2, 'B' || lpad('*', 32000, '#'))
*
ERRO na linha 1:
ORA-01489: o resultado da concatenação de string é extenso demais

== não podia funcionar mesmo... Vamos usar o PL/SQL :

[EMAIL PROTECTED]:SQLDECLARE
  2 v_long long;
  3  BEGIN
  4 v_long := 'B' || lpad('*', 32000, '#');
  5insert into TAB_LONG values(2, v_long);
  6  END;
  7  /

Procedimento PL/SQL concluído com sucesso.

== vamos tentar passar o limite do PL/SQL...

[EMAIL PROTECTED]:SQLed
Gravou file afiedt.buf

  1  DECLARE
  2 v_long long;
  3  BEGIN
  4 v_long := 'C' || lpad('*', 32000, '#') || lpad('', 
32000, '@') ;
  5insert into TAB_LONG values(3, v_long);
  6* END;
[EMAIL PROTECTED]:SQL/
DECLARE
*
ERRO na linha 1:
ORA-06502: PL/SQL: erro: buffer de string de caracteres pequeno 
demais numérico ou de valor
ORA-06512: em line 4


=== Até OFICIALMENTE na documentação, o 100% RECOMENDADO é vc passar 
a usar LOBs, que aí além de com LOBs as limitações do cacareco do 
LONG não se aplicarem, vc ainda tem a DBMS_LOB, mas se por qquer 
motivo vc for obrigado a usar LONGs, esses são os limites nesses dois 
ambientes/linguagens : pelo jeito, também está entrando em cena aí 
alguma limitação da sua tool SQL Navigator, entre em contato com o 
Fabricante dela e/ou consulte a documentação pra ver quais são... 
Programaticamente, em PL/SQL, vc tem a opção de processar LONGs 
maiores via DBMS_SQL, pesquise em http://asktom.oracle.com que vc 
acha alguns exemplos.

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br, Anderson [EMAIL PROTECTED] 
escreveu

 Na versão 10g não há o type LONG, apenas as variações do type LOB.
 
 É possível fazer agumas operações de select simples nestes campos, 
 mas a manipulação destes types é feita por meio da package DBMS_LOB.
 
 
 
 --- Em oracle_br@yahoogrupos.com.br, Genivaldo Silva 
[EMAIL PROTECTED] 
 escreveu
 
  
  
  Pessoal,
  
  Tenho um banco na versão 10g (10.1.0.5.0). Gostaria de saber se 
 nessa versão
  eu consigo fazer selects em campos do tipo LONG? Se sim, como 
 concatenar
  valores a ele? Pois tenho uma versão do SQL Navigator 3 que 
mostra o
  conteúdo desse campo no proprio select, enquanto a versão 5 não 
 mostra. Mas
  quando tento trabalhar esse campo fazer uma concatenação, por 
 exemplo, me
  é retornado um erro de tipos inconsistêntes (ORA-932).
  
  Alguem pode me ajudar?
  
  Genivaldo
  
  
  [As partes desta mensagem que não continham texto foram removidas]
 






 


[As partes desta mensagem que não continham texto foram removidas]



--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o 
link do mesmo para evitar trafego(pedidos) desnecessário. 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

* Para sair deste grupo, envie um 

RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico jlchiappa
Blz, só um detalhe adicional, q não sei se vc sabe : tipicamente nas 
tools clientes há alguma configuração pra indicar o máximo de 
caracteres retornados por um SELECT com strings longas, no caso do 
plus é o parãmetro sqlplus LONG, cfrme :

SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 10:22:20 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining 
options


[EMAIL PROTECTED]:SQLshow long
long 80

== ok, o meu plus está configurado pra mostrar 80 bytes só dos 
datatypes string longos, vamos ver que é vero :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1
A#
##

 2
B#
##

== realmente, truncou em 80 caracteres, vou mudar :

[EMAIL PROTECTED]:SQLset long 50

== agora vai mostrar tudo :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1
A#
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico Genivaldo Silva
Ok,
 
Vou testar aqui...

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: terça-feira, 8 de agosto de 2006 10:23
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Re: Duvida Select


Blz, só um detalhe adicional, q não sei se vc sabe : tipicamente nas 
tools clientes há alguma configuração pra indicar o máximo de 
caracteres retornados por um SELECT com strings longas, no caso do 
plus é o parãmetro sqlplus LONG, cfrme :

SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 10:22:20 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining 
options


[EMAIL PROTECTED]:SQLshow long
long 80

== ok, o meu plus está configurado pra mostrar 80 bytes só dos 
datatypes string longos, vamos ver que é vero :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1
A#
##

 2
B#
##

== realmente, truncou em 80 caracteres, vou mudar :

[EMAIL PROTECTED]:SQLset long 50

== agora vai mostrar tudo :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1

RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico Genivaldo Silva
Chiappa,
 
Ainda não deu certo.
Eu ajustei essa variavel no meu SQL Plus, porem fazendo o seguinte select:
 
select 'A'||text_long||'B' from teste;
 
Eu obtenho o seguinte resultado:
 
'A'||text_long||'B'
--
AB
AB
AB
 
 
Genivaldo

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: terça-feira, 8 de agosto de 2006 10:23
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Re: Duvida Select


Blz, só um detalhe adicional, q não sei se vc sabe : tipicamente nas 
tools clientes há alguma configuração pra indicar o máximo de 
caracteres retornados por um SELECT com strings longas, no caso do 
plus é o parãmetro sqlplus LONG, cfrme :

SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 10:22:20 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining 
options


[EMAIL PROTECTED]:SQLshow long
long 80

== ok, o meu plus está configurado pra mostrar 80 bytes só dos 
datatypes string longos, vamos ver que é vero :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1
A#
##

 2
B#
##

== realmente, truncou em 80 caracteres, vou mudar :

[EMAIL PROTECTED]:SQLset long 50

== agora vai mostrar tudo :

[EMAIL PROTECTED]:SQLselect * from tab_long;

C1
--
C2
--
--
 1

RES: [oracle_br] Re: Duvida Select

2006-08-08 Por tôpico jlchiappa
Vc está concatenando no SELECT, e o operador de concatenação numa 
query com certeza NÃO tem o datatype LONG garantido... E mais, como o 
LONG é de-suportado (só existe pra compatibilidade), ele NÂO mais 
possui correção de bugs os eventuais bugs  (da própria tool cliente 
como o plus no caso) não são mais corrigidos... No meu caso :

SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 12:38:51 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining 
options

[EMAIL PROTECTED]:SQLdesc tab_long
 Nome  Nulo?Tipo
 -  --
--
 C1 NUMBER
 C2 LONG

[EMAIL PROTECTED]:SQLselect c1, 'A' || c2 || 'B' from tab_long;
select c1, 'A' || c2 || 'B' from tab_long
  *
ERRO na linha 1:
ORA-00932: tipos de dados inconsistentes: esperava NUMBER obteve LONG


[EMAIL PROTECTED]:SQLselect 'A' || c2 || 'B' from tab_long;
select 'A' || c2 || 'B' from tab_long
  *
ERRO na linha 1:
ORA-00932: tipos de dados inconsistentes: esperava NUMBER obteve LONG


== vê, o || quando vc especifica elementos de datatypes diferentes 
ele TEM QUE fazer uma conversão implícita, e totalmente erradamente 
converteu pra NUMBER... Mesmo se eu indicar o datatype :

[EMAIL PROTECTED]:SQL/
select 'A' || to_char(c2) || 'B' from tab_long
  *
ERRO na linha 1:
ORA-00932: tipos de dados inconsistentes: esperava CHAR obteve LONG

isso demonstra que a questão é no LONG mesmo Faça um select SEM 
concatenação pra ver o que realmente vc tem gravado.

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, Genivaldo Silva [EMAIL PROTECTED] 
escreveu

 Chiappa,
  
 Ainda não deu certo.
 Eu ajustei essa variavel no meu SQL Plus, porem fazendo o seguinte 
select:
  
 select 'A'||text_long||'B' from teste;
  
 Eu obtenho o seguinte resultado:
  
 'A'||text_long||'B'
 --
 AB
 AB
 AB
  
  
 Genivaldo
 
   _  
 
 De: oracle_br@yahoogrupos.com.br 
[mailto:[EMAIL PROTECTED] Em
 nome de jlchiappa
 Enviada em: terça-feira, 8 de agosto de 2006 10:23
 Para: oracle_br@yahoogrupos.com.br
 Assunto: RES: [oracle_br] Re: Duvida Select
 
 
 Blz, só um detalhe adicional, q não sei se vc sabe : tipicamente 
nas 
 tools clientes há alguma configuração pra indicar o máximo de 
 caracteres retornados por um SELECT com strings longas, no caso do 
 plus é o parãmetro sqlplus LONG, cfrme :
 
 SQL*Plus: Release 10.1.0.4.0 - Production on Ter Ago 8 10:22:20 2006
 
 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
 
 Conectado a:
 Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - 
Production
 With the Partitioning, Oracle Label Security, OLAP and Data Mining 
 options
 
 
 [EMAIL PROTECTED]:SQLshow long
 long 80
 
 == ok, o meu plus está configurado pra mostrar 80 bytes só dos 
 datatypes string longos, vamos ver que é vero :
 
 [EMAIL PROTECTED]:SQLselect * from tab_long;
 
 C1
 --
 C2
 
--
 --
  1
 
A#
 ##
 
  2
 
B#
 ##
 
 == realmente, truncou em 80 caracteres, vou mudar :
 
 [EMAIL PROTECTED]:SQLset long 50
 
 == agora vai mostrar tudo :
 
 [EMAIL PROTECTED]:SQLselect * from tab_long;
 
 C1
 --
 C2
 
--
 --
  1