Pular para o conteúdo
  • Este tópico contém 7 respostas, 6 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por Avatar de Rodrigo AlmeidaRodrigo Almeida.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #85043
    Avatar de RCBMapsRCBMaps
    Participante

      Sou novo no assunto, e queria saber qual tipo de campo devo usar no Oracle 10g, quando nesse campo será incluido texto e numeros porem não sei a quantidade, pode ser 500 caracteres como pode ser 1000. por acaso teria que usar um campo tipo Blob?

      #85044
      Avatar photoRegis Araujo
      Participante

        Ola amigo, bom dia!

        Bom, o type Varchar2 aceita no máximo 4000 caracteres, se for algo maior que isto, vc pode utilizar o Clob que aceita bem mais…

        Abraços…

        #85045
        Avatar de Ricardo Portilho ProniRicardo Portilho Proni
        Participante

          E evite os BLOBs.

          #85047
          Avatar de marcelomirandolamarcelomirandola
          Participante

            O varchar(2) é uma boa opção, pois apesar de você criar o atributo como varchar(2) de 1000 (p.ex.), e usar apenas 50, ele vai ocupar apenas os 50 e não os 1000 que foi declarado.

            #85053
            Avatar de vierivieri
            Participante

              SQL> ! oerr ora 910
              00910, 00000, “specified length too long for its datatype”
              // *Cause: for datatypes CHAR and RAW, the length specified was > 2000;
              // otherwise, the length specified was > 4000.
              // *Action: use a shorter length or switch to a datatype permitting a
              // longer length such as a VARCHAR2, LONG CHAR, or LONG RAW

              #85055
              Avatar de Rodrigo AlmeidaRodrigo Almeida
              Participante

                Isso é verdade… o que o marcelo e vieri postaram.

                Abaixo, fiz um exemplo de “besta” para ver como é coloca os espaços em branco no campo que é feito com CHAR!

                SQL> create table TST (a varchar2(100), b char(100));

                Tabela criada.

                SQL> insert into TST values (‘RODRIGO’,’RODRIGO’);

                1 linha criada.

                SQL> commit;

                Commit concluÝdo.

                SQL> select dump(a), dump(b) from TST;

                DUMP(A)


                DUMP(B)


                Typ=1 Len=7: 82,79,68,82,73,71,79
                Typ=96 Len=100: 82,79,68,82,73,71,79,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
                32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,3
                2,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32

                Então dê preferência ao VARCHAR2, que vai no limite de 32KB… se tu precisar de mais… tem as colunas LONG que podem chegar no limite de 2GB de armazenamento,.. e depois tem as LOBS mesmo que chegam no seus 4GBs de armazenamento… só que aí, como o Ricardo disse, deverá ter seus CUIDADOS! Pq LOB é complicado para administrar e trabalhar com elas.

                Abraços,
                Rodrigo Almeida

                #85061
                Avatar photoRegis Araujo
                Participante

                  Ei Rodrigo, o Varchar2 não tem limite de 4k???

                  Eu achei q ele somente chegasse a 32k dentro do codigo Pl/Sql….

                  Abraços…

                  #85074
                  Avatar de Rodrigo AlmeidaRodrigo Almeida
                  Participante

                    Thunder!

                    É verdade cara! Tinha me esquecido dessas passagens. VARCHAR2 em tabela vai até 4K e em PL/SQL até 32K. Está correto mesmo!

                    Fiz uns testes aqui de besta, e deu para percerber a diferença!


                    SQL> ed
                    Gravou file afiedt.buf

                    1 declare
                    2 teste varchar2(32767);
                    3 begin
                    4 teste := LPAD('RODRIGO',32767,'0');
                    5 dbms_output.put_line ('Tamanho:' || length(teste));
                    6* end;
                    SQL> /
                    Tamanho:32767

                    Procedimento PL/SQL concluÝdo com sucesso.

                    SQL> create table TST (a varchar2(32000));
                    create table TST (a varchar2(32000))
                    *
                    ERRO na linha 1:
                    ORA-00910: specified length too long for its datatype

                    SQL> create table TST (a varchar2(4000));

                    Tabela criada.

                    SQL> alter table TST modify a varchar2(4001);
                    alter table TST modify a varchar2(4001)
                    *
                    ERRO na linha 1:
                    ORA-00910: specified length too long for its datatype

                    SQL> alter table TST modify a varchar2(4000);

                    Tabela alterada.

                    Abraços,
                    Rodrigo Almeida[/code]

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.
                  plugins premium WordPress