Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #82235
    hermesmc
    Participante

      Senhores,

      Criei um trigger que é disparada sempre que ha uma atulização em uma tabela. Ela grava os dados anteriores da tabela em uma outra acrescentando o timestamp. No insert eu coloquei “current_timestamp”. Porém reparei que ele só atualiza os três primeiros campos dos milésimos de segundo, ex.: “10/07/08 17:10:20:798000000”. Ou seja, as 6 ultimas casas são preenchidas com zero. Isso é correto? Caso negativo, como corrigir? Meu ORACLE é 10g servidor windows 2003 server e estações com windows XP SP3.

      #82236
      Marcio68Almeida
      Participante

        Até onde sei, essa é a precisão máxima do Oracle, milisegundos…

        #82237
        hermesmc
        Participante

          Para algumas alterações é retornado um erro por chave duplicada. No caso, a chave é o campo timestamp. Alterei, na tabela que é povoada pelo trigger, o campo chave para um campo com código auto-incremental(feito com uma sequencia) e resolveu meu problema. A minha dúvida é o pq de se ter um campo com esse tamanho e não utilizar. Pq depois dos segundos ainda existem 9 posições e o oracle só usa três? Só curiosidade.

          #82238
          hermesmc
          Participante

            Achei em outro forum um problema parceido com o meu:
            http://forum.devmedia.com.br/viewtopic. … 36c1799fa4
            Quando a autora da pergunta do forum executa um select current_timestamp from dual, a precisão no linux é de seis casas depois dos segundo e no windows a mesma query retorna uma precisão de três casas…

            #82240
            Marcio68Almeida
            Participante

              OK, deixei de ser preguiçoso e fiz o teste… 😳

              No Linux :
              SQL> Select current_timestamp from dual;

              CURRENT_TIMESTAMP

              15-JUL-08 10.02.32.408004 AM -03:00

              No windows
              SQL> Select current_timestamp from dual;

              CURRENT_TIMESTAMP

              15/07/08 10:02:01,426245 -03:00

              Ambos deram precisão de seis casas…
              Portanto não é sistema operacional…

              Obs.: Estou testando em Oracle 9i RAC

              #82241
              hermesmc
              Participante

                Valeu Márcio,

                Só que aqui no meu a precisão é de três casas, alguma dica? O mesmo select dá:

                15/07/08 10:10:55,281000000

                #82242
                Marcio68Almeida
                Participante

                  Mostre o resultado destas duas consultas
                  show parameters nls
                  select * from v$NLS_PARAMETERS;

                  #82243
                  hermesmc
                  Participante

                    Resultado do select * from v$NLS_PARAMETERS

                    PARAMETER VALUE
                    —————————- —————————–
                    NLS_LANGUAGE BRAZILIAN PORTUGUESE
                    NLS_TERRITORY BRAZIL
                    NLS_CURRENCY R$
                    NLS_ISO_CURRENCY BRAZIL
                    NLS_NUMERIC_CHARACTERS ,.
                    NLS_CALENDAR GREGORIAN
                    NLS_DATE_FORMAT DD/MM/RR
                    NLS_DATE_LANGUAGE BRAZILIAN PORTUGUESE
                    NLS_CHARACTERSET WE8MSWIN1252
                    NLS_SORT WEST_EUROPEAN
                    NLS_TIME_FORMAT HH24:MI:SSXFF
                    NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
                    NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
                    NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
                    NLS_DUAL_CURRENCY Cr$
                    NLS_NCHAR_CHARACTERSET AL16UTF16
                    NLS_COMP BINARY
                    NLS_LENGTH_SEMANTICS BYTE
                    NLS_NCHAR_CONV_EXCP FALSE

                    19 rows selected

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