[firebase-br] RES: Aumentar tamanho de campo que é chave primária, tem relacionamento e tigger

Moacir - Softin Sistemas moacir em softin.com.br
Dom Set 21 11:29:46 -03 2014


Siga estas instruções abaixo que você não terá necessidade de excluir
trigger, procedure,...:


1-Criar um procedure para excluir a chave primaria da tabela que será
alterado o campo (ou crie um EXECUTE BLOCK):
CREATE PROCEDURE P_PROCEDURE_EXCLUIR_PRIMARY_KEY (
    tabela varchar(50))
as
declare variable chave varchar(50);
begin
        CHAVE = '';
        FOR SELECT
                RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS WHERE
RDB$RELATION_NAME =
                :TABELA AND RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' INTO CHAVE
DO
                EXECUTE STATEMENT 'ALTER TABLE '||TABELA||' DROP CONSTRAINT
'||CHAVE;

end;
COMMIT WORK;
EXECUTE PROCEDURE P_PROCEDURE_EXCLUIR_PRIMARY_KEY('Nome da tabela para
excluir chave primaria');
COMMIT WORK;
Drop procedure  P_PROCEDURE_EXCLUIR_PRIMARY_KEY;
COMMIT WORK;

2-Aumentar o tamanho do campo de 4 para 6:

UPDATE RDB$FIELDS A SET
    A.RDB$FIELD_LENGTH = 06,
    A.RDB$CHARACTER_LENGTH = 06
WHERE A.RDB$FIELD_NAME IN
(SELECT B.RDB$FIELD_SOURCE
FROM RDB$RELATION_FIELDS B
WHERE B.RDB$FIELD_NAME = 'Nome do Campo que sera alterado de tamanho'
   AND B.RDB$RELATION_NAME in ('Nome da Tabela')
   AND B.RDB$FIELD_SOURCE = A.RDB$FIELD_NAME);
COMMIT WORK;

3-Recriar o indice com o novo tamanho:

ALTER TABLE 'Nome da tabela' ADD PRIMARY KEY (campo(s) para o Indice);
COMMIT WORK;

Att,
Moacir


-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
Enviada em: domingo, 21 de setembro de 2014 08:32
Para: FireBase
Assunto: Re: [firebase-br] Aumentar tamanho de campo que é chave primária,
tem relacionamento e tigger

Não, mas vc pode fazer um PUMP dos dados de uma base para outra (com o
campo no tamanho que vc quer), ou desative as constraints que dependem
desse campos, faça a alteração do tamanho, e depois reative.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

SN> Pessoal,

SN> Estou com um banco da dados que tem um campo (vamos chama-lo de C) que é
SN> char (4), e esta tabela já está bem povoada (e seus relacionamentos
também).

SN> Só que surgiu a necessidade de aumentar o tamanho do campo C para char
(6).

SN> Só que teria que apagar chave primária, relacionamentos, tiggers, etc e
SN> depois recria-los, mas não quero fazer isto.

SN> Fiz um backup de um banco onde o campo C já está com o tamanho char (6).

SN> A pergunta é: tem como eu restaurar os dados do banco onde C é char(4)
na
SN> estrutura do banco onde C é char(6) ?

SN> Obrigado.
SN> ______________________________________________
SN> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
SN> Para saber como gerenciar/excluir seu cadastro na lista, use:
SN> http://www.firebase.com.br/fb/artigo.php?id=1107
SN> Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista