RES: [oracle_br] Re: Duvida Select
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
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
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
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
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
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