Márcio Ricardo, nada a ver consoante ou vogal. Márcio Grazianni, a 
sua questão é ultra-comum, é uma FAQ, iirc já respondida aqui mesmo 
no Fórum, e é  a seguinte : vc tá vendo esse setting de 

NLS_CHARACTERSET AL32UTF8

que vc nos mostra na sua msg ? Seguinte, esse "32" inicial que esse 
banco, ao armazenar caracteres acima de ASCII-127 (ie, caracteres 
acentuados, e especiais como o sinal de euro - NÃO É só "vogais e 
consoantes"!! ), vai poder usar até 32 bits (4 bytes) para esses 
caracteres, E o datatype VARCHAR2(30) está reservando apenas 30 
bytes...

  Note que absolutamente charactersets **** NÃO SÃO **** uma invenção 
da Oracle, como mostrado em http://www.unicode.org/faq/basic_q.html , 
por exemplo :, eles são um conceito GERAL e GENÉRICO de TI, que a 
Oracle é obrigada a adotar, como a maioria dos outros fabricantes de 
software, é um padrão. 

No caso do bd Oracle, vc tem duas opções : 

a) SE vc só for utilizar esse banco com aplicações/caracteres/línguas 
européias ocidentais, E não for usar caracteres especiais não-
contidos, vc pode converter esse banco pra usar um characterset de 8 
bits, por exemplo :

[EMAIL PROTECTED]:SQL>select * from nls_database_parameters where 
parameter='NLS_CHARACTERSET';

PARAMETER                      VALUE
------------------------------ ---------------------------------------
-
NLS_CHARACTERSET               WE8ISO8859P1

[EMAIL PROTECTED]:SQL>CREATE TABLE operacao_nota
  2  (
  3  codigo NUMERIC(8) NOT NULL,
  4  descricao VARCHAR2(30) NOT NULL,
  5  CONSTRAINT pk_operacao_nota_codigo PRIMARY KEY (codigo)
  6  );

Tabela criada.

[EMAIL PROTECTED]:SQL>INSERT INTO OPERACAO_NOTA (CODIGO, DESCRICAO) VALUES 
(25, 'Exclusão saídas bonificação');

1 linha criada.


nos manuais de Globalização do bd Oracle vc acha a sintaxe & 
procedimento para converter bds de um characterset pra outro.


OU

b) vc pode usar o datatype RECOMENDADO para charactersets multibyte, 
que é o NVARCHAR2, aí ele reserva espaço em CARACTERES, e NÂO em 
bytes :

SQL> select * from nls_database_parameters where 
parameter='NLS_CHARACTERSET';

PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_CHARACTERSET               UTF8

SQL> CREATE TABLE operacao_nota
  2  (
  3  codigo NUMERIC(8) NOT NULL,
  4  descricao VARCHAR2(30) NOT NULL,
  5  CONSTRAINT pk_operacao_nota_codigo PRIMARY KEY (codigo)
  6  );

Tabela criada.

SQL> INSERT INTO OPERACAO_NOTA (CODIGO, DESCRICAO) VALUES 
(25, 'Exclusão saídas
bonificação');
INSERT INTO OPERACAO_NOTA (CODIGO, DESCRICAO) VALUES (25, 'Exclusão 
saídas bonif
icação')
                                                          *
ERRO na linha 1:
ORA-12899: valor muito grande para a 
coluna "SYSTEM"."OPERACAO_NOTA"."DESCRICAO"
 (real: 32, mßximo:
30)


SQL> alter table operacao_nota modify descricao NVARCHAR2(30);

Tabela alterada.

SQL> INSERT INTO OPERACAO_NOTA (CODIGO, DESCRICAO) VALUES 
(25, 'Exclusão saídas
bonificação');

1 linha criada.

SQL> desc OPERACAO_NOTA
 Nome                   Nulo?    Tipo
 ---------------------- -------- ------------------------------------
 CODIGO                 NOT NULL NUMBER(8)
 DESCRICAO              NOT NULL NVARCHAR2(30)

==> JÁ que , como eu disse, isso não é uma invenção da Oracle, 
pesquisando na net vc acha sites com lista de caracteres presentes em 
cada characterset que o bd Oracle aceita, se vc tiver em dúvida. 

[]s

 Chiappa
 

--- Em oracle_br@yahoogrupos.com.br, Márcio Ricardo <[EMAIL PROTECTED]> 
escreveu
>
> Marcio, não sei a solução, mas esse problema já postado aqui no 
grupo e se não me engano é porque as letras com vogais ocupam mais 
bytes do q as sem vogais e com isso estoura o comprimento da 
variável. Faça o teste sem os acentos e dê uma procurada na lista q 
vc achar explicação melhor
>   ----- Original Message ----- 
>   From: Marcio Grazianni 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Wednesday, June 28, 2006 10:31 AM
>   Subject: [oracle_br] Oracle XE e acentos
> 
> 
>   Olá pessoal.
> 
>   Estou com o seguinte problema: Instalei o Oracle 10g XE e criei 
uma 
>   tabela com um campo que suporta 30 caracteres - varchar2(30) - e 
estou 
>   tentando inserir a seguinte linha mas dá um erro que segue abaixo:
> 
>   este comando funciona normal
>   CREATE TABLE operacao_nota
>   (
>     codigo    NUMERIC(8) NOT NULL,
>     descricao VARCHAR2(30) NOT NULL,
>     CONSTRAINT pk_operacao_nota_codigo PRIMARY KEY (codigo)
>   );
> 
>   este comando dá o erro
>   INSERT INTO OPERACAO_NOTA (CODIGO, DESCRICAO) VALUES 
(25, 'Exclusão 
>   saídas bonificação');
>   ORA-12899: valor muito grande para a coluna 
>   "MARCIO"."OPERACAO_NOTA"."DESCRICAO" (real: 31, máximo: 30)
> 
>   Mas observem que a string 'Exclusão saídas bonificação' só tem 27 
>   caracteres. Mas tem 4 caracteres com acentos que parece que o 
Oracle 
>   considera como dois caracteres cada um.
> 
>   Segue abaixo a configuração do banco em questão: (Instalado com 
todas as 
>   opções padrão, o velho next, next...)
> 
>   NLS (National Language Support)         
>   Parâmetro de Idioma Nacional 
>   <javascript:html_PPR_Report_Page
(this,'R172752728356379421','http://127.0.0.1:8080/apex/f?
p=4500:36:4440931247653011:fsp_sort_1_desc::RP&fsp_region_id=172752728
356379421');>classificar 
>   por esta coluna       Valor 
>   <javascript:html_PPR_Report_Page
(this,'R172752728356379421','http://127.0.0.1:8080/apex/f?
p=4500:36:4440931247653011:fsp_sort_2::RP&fsp_region_id=17275272835637
9421');> 
> 
>   NLS_CALENDAR       GREGORIAN
>   NLS_CHARACTERSET       AL32UTF8
>   NLS_COMP       BINARY
>   NLS_CURRENCY       R$
>   NLS_DATE_FORMAT       DD/MM/RR
>   NLS_DATE_LANGUAGE       BRAZILIAN PORTUGUESE
>   NLS_DUAL_CURRENCY       Cr$
>   NLS_ISO_CURRENCY       BRAZIL
>   NLS_LANGUAGE       BRAZILIAN PORTUGUESE
>   NLS_LENGTH_SEMANTICS       BYTE
>   NLS_NCHAR_CHARACTERSET       AL16UTF16
>   NLS_NCHAR_CONV_EXCP       FALSE
>   NLS_NUMERIC_CHARACTERS       ,.
>   NLS_SORT       WEST_EUROPEAN
>   NLS_TERRITORY       BRAZIL
>   NLS_TIME_FORMAT       HH24:MI:SSXFF
>   NLS_TIMESTAMP_FORMAT       DD/MM/RR HH24:MI:SSXFF
>   NLS_TIMESTAMP_TZ_FORMAT       DD/MM/RR HH24:MI:SSXFF TZR
>   NLS_TIME_TZ_FORMAT       HH24:MI:SSXFF TZR
> 
> 
> 
>   Desde já agradeço qualquer ajuda
> 
>   Marcio Grazianni
>   [EMAIL PROTECTED]
>   Brasil Software Soluções Empresariais Ltda.
> 
> 
>    
> 
> [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/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 
__________________________________________________________________
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

 



Responder a