[firebase-br] Criar campo chave para diversas tabelas em um único comando

Eduardo Belo beloelogica em gmail.com
Ter Jun 5 16:20:00 -03 2012


Meu caro Robson, primeiramente agradeço pela boa vontade em ajudar.

Veja bem, executando o seu código no IBExpert, deu a seguinte mensagem:

This operation is not defined for system tables.
unsuccessful metadata update.
Column: ITEM not defined as NOT NULL - cannot be used in PRIMARY KEY
constraint definition.
Essa base vem de uma importação de tabelas Paradox, não tem relacionamento
e os campos estão como NULL, então preciso antes de definir esses indices,
corrigir esse problema em todos os campos chaves (ITEM) definindo como NOT
NULL. Você pode me ajudar mais uma vez?

Obrigado.

Em 5 de junho de 2012 12:30, Robson Zambroti <rlzambroti em gmail.com>escreveu:

> Eduardo,
> Tente assim (obs. testado no FB2.5):
>
> EXECUTE BLOCK
> AS
> DECLARE VARIABLE SQL VARCHAR(1500);
> BEGIN
>  FOR
>      SELECT DISTINCT
>             'ALTER TABLE '||
>             TRIM(RDB$RELATION_FIELDS.RDB$RELATION_NAME)||
>             ' ADD CONSTRAINT PK_'||
>             TRIM(RDB$RELATION_FIELDS.RDB$RELATION_NAME)||
>             ' PRIMARY KEY
> ('||TRIM(RDB$RELATION_FIELDS.RDB$FIELD_NAME)||');'
>        FROM RDB$RELATION_FIELDS
>       WHERE RDB$RELATION_FIELDS.RDB$FIELD_NAME = 'ITEM'
>         AND RDB$RELATION_FIELDS.RDB$VIEW_CONTEXT IS NULL
>         AND NOT EXISTS ( SELECT NULL
>                            FROM RDB$RELATION_CONSTRAINTS,
> RDB$INDEX_SEGMENTS
>                           WHERE
> RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
>                             AND RDB$INDEX_SEGMENTS.RDB$FIELD_NAME =
> RDB$RELATION_FIELDS.RDB$FIELD_NAME
>                             AND RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME
> = RDB$RELATION_FIELDS.RDB$RELATION_NAME
>                             AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME =
> RDB$INDEX_SEGMENTS.RDB$INDEX_NAME  )
>        INTO :SQL
>  DO
>  BEGIN
>    EXECUTE STATEMENT SQL;
>  END
> END
>
> Att
> Robson Zambroti
>
> Em 5 de junho de 2012 12:10, Eduardo Belo <beloelogica em gmail.com>
> escreveu:
>
> > Prezados,
> >
> >
> > Tem como criar um script  único afim de criar uma chave primaria para
> todas
> > as tabelas de uma vez só? Todas as tabelas em comum tem o campo chave
> > "ITEM". A questão é que são 5 bases e todas em média tem cerca de 100
> > tabelas, pela lógica teria que fazer isso manualmente uma a uma, tipo:
> > ALTER TABLE CLIENTE ADD CONSTRAINT PK_CLIENTE PRIMARY KEY (ITEM).
> >
> > Tem como fazer isso de uam vez só afim de facilitar a manutenção?
> >
> >
> > A mesma pergunta faço para alterar de uma vez só um determinado tipo de
> > campo de todas as tabelas, exemplo: alterar todas as tabelas que tem o
> > campo tipo DOUBLE PRECISION para NUMERIC(15,2) ?
> >
> >
> >
> > Agradeço antecipadamente a todos que ajudarem.
> >
> >
> >
> > Eduardo Belo
> > ______________________________________________
> > 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
> >
>
>
>
> --
> Att.
> Robson Zambroti
> ______________________________________________
> 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