inserir em RDB$INDEX_SEGMENTS e RDB$INDICES

Firebird

17/05/2004

olá...

Estou com um problema:
Criei a tabela e esqueci de criar a primary key dela.

Usando o alter table eu não consigo criar, ele dá um erro.

Observando as tabelas de sistema RDB$INDEX_SEGMENTS e RDB$INDICES, criei (´ na unha ´), a primary key.

Pergunta:
Gostaria de saber se o que fiz foi correto.
Ou se corro o risco de ´zuar´ o sistema.

Uso Delphi 6 e Interbase 6.0

Obrigada
Karen


Karencamila

Karencamila

Curtidas 0

Respostas

Afarias

Afarias

17/05/2004

Completamente ´desaconselhável´ seu procedimento.

É possível q vc resolva o problema assim (sem causar danos) -- mas, não tentaria isso nunca em um banco em produção -- as consequências podem ser imprevisíveis se vc já não tem experiência com esta ação.

Melhor saria postar aqui qual o erro q estava recebendo e ver se resolve para criar a chave com comandos DDL.



T+


GOSTEI 0
Karencamila

Karencamila

17/05/2004

Bom os erros que ocorrem são:

[b:9e137ddde4]- Primeiramente tento criar um campo ( que será a primary key ) na tabela tentado criar como primary key:[/b:9e137ddde4]
alter table tab_contratos
add contador integer not null primary key;

[b:9e137ddde4]E o erro é: [/b:9e137ddde4]
´Attempt to store duplicate value (visible to active transactions) in unique index ´RDB$PRIMARY72´
null segment of UNIQUE KEY
Statement: alter table tab_contratos
add contador integer not null primary key´

[b:9e137ddde4]Sendo que a cada vez que tento executar o código, esse codigo: ´RDB$PRIMARY72´ cresce , exemplo:[/b:9e137ddde4]
[b:9e137ddde4]>>Se eu tentar novamente executar o codigo, o erro será:[/b:9e137ddde4]
Attempt to store duplicate value (visible to active transactions) in unique index ´RDB$PRIMARY73´
null segment of UNIQUE KEY
Statement: alter table tab_contratos
add contador integer not null primary key.


[b:9e137ddde4]Então faço diferente, crio o campo:[/b:9e137ddde4]
alter table tab_contratos
add contador integer not null ;

[b:9e137ddde4]E depois tento atribuir a ele primary key:[/b:9e137ddde4]
alter table tab_contratos add constraint PK_CONTADOR primary key(contador);

[b:9e137ddde4]E ele dá o seguinte erro:[/b:9e137ddde4]
Attempt to store duplicate value (visible to active transactions) in unique index ´RDB$PRIMARY76´
null segment of UNIQUE KEY
Statement: alter table tab_contratos add constraint PK_CONTADOR primary key(contador)


[b:9e137ddde4]O que posso estar fazendo errado??
Ou será que o interbase 6.0 não aceita esse tipo de atribuição??[/b:9e137ddde4]
[b:9e137ddde4]
Obrigada desde já
Karen[/b:9e137ddde4]


GOSTEI 0
Afarias

Afarias

17/05/2004

Bom, o problema está no procedimento (acredito), vc deve seguir o seguinte::

** admitindo q não exista já uma chave primária na tabela em questão, se existir, esta deve ser antes dropada **


1- crie o campo que será chave primária::

alter table tab_contratos add contador integer not null;


2- se a tabela já possui registros, preencha este novo campo com valores únicos!!! (muito importate!)::

update tab_contratos set contador = gen_id(algum_generator, 1);
commit;


3- adicione então a chave primária na tabela::

alter table tab_contratos add constraint pk_tab_contratos
primary key (contador);




T+


GOSTEI 0
Karencamila

Karencamila

17/05/2004

:D :D :D :D :D :D

DEU CERTO!!!

:D :D :D :D :D :D

Nossa!!! Valew....
MUUUITO OBRIGADA!!!!


Karen


GOSTEI 0
POSTAR