Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #105662
    Avatar de DBA_LUCASDBA_LUCAS
    Participante

      Bom dia Amigos !

      Seguinte , estou com um problema no qual uma base de dados perdeu todos os defaults dos campos , preciso criar um script que corriga todos os campos…

      O script abaixo faria isso porem estou com um problema para concatenar o DATA_DEFAULT da tabela USER_TAB_COLUMNS …

      select ‘ALTER TABLE ‘||table_name|| ‘ MODIFY ‘||column_name||’ ‘||data_type||'(‘||data_length||’) DEFAULT “‘||substr(data_default,1,100)||'”;’ from user_tab_columns where data_default is not null ;

      um exemplo do resultado:

      ALTER TABLE PRODUTO MODIFY DISPONIBILIDADE VARCHAR2(1) DEFAULT ‘N’ ;

      Mas quando tento concatenar o campo DATA_DEFAULT da o seguinte erro:

      ERRO na linha 1:
      ORA-00932: tipos de dados inconsistentes: esperava NUMBER obteve LONG

      ja tentei usar substr,to_char mas nada da certo , alguem teria uma forma de me ajudar ???

      #105663
      Avatar de rmanrman
      Participante

        @DBA_LUCAS

        Como isso é apenas uma tarefa pontual, talvez essa solução possa ser levada em consideração.

        Segue um tópico que mostra como converter LONG para VARCHAR2:

        https://forums.oracle.com/thread/2429393

        Estando em VARCHAR2 a solução atual é valida.

        #105664
        Avatar de DBA_LUCASDBA_LUCAS
        Participante

          Rman , li mas não achei nada a respeito tentei usar o TO_LOB mas deu o erro abaixo:

          ERRO na linha 1:
          ORA-00932: tipos de dados inconsistentes: esperava – obteve LONG

          Vc nao sabe nada que eu possa usar que possa retornar os resultados concatenados ???

          #105665
          Avatar de rmanrman
          Participante

            @DBA_LUCAS

            Veja a resposta do DomBrooks, seguindo a ideia dele:


            CREATE TABLE T1 AS
            SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,TO_LOB(DATA_DEFAULT) DATA_DEFAULT
            FROM USER_TAB_COLUMNS
            WHERE DATA_DEFAULT IS NOT NULL;

            SELECT 'ALTER TABLE '||TABLE_NAME|| ' MODIFY '||COLUMN_NAME||' '||DATA_TYPE||'('||DATA_LENGTH||') DEFAULT "'||DATA_DEFAULT||'";' SQL_TEXT FROM T1 WHERE DATA_DEFAULT IS NOT NULL ;

            DROP TABLE T1 PURGE;

            A sacada é que é permitido o TO_LOB em um CTAS. Realmente o TO_LOB em um SELECT simples da erro.

            #105666
            Avatar de DBA_LUCASDBA_LUCAS
            Participante

              Rman ,

              Entendi e deu certo , Salvo horas de serviço , muito obrigado pela ajuda !

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