Firebird – Apagando uma Chave Primária (PrimaryKey) de uma tabela

Excluir uma chave primária quando se tem uma ferramenta visual a frente não é uma operação complicada de se fazer no Firebird.
O problema mesmo… é quando precisamos fazer isto por um script…
O Firebird usa um mapeamento de nomes para a chave primária que cria – diferente do nome do índice e passa a fazer parte da lista de “constraints” da tabela.
Para excluir uma “constraint” é necessário descobrir o seu nome e aplicar a “DROP” da constrait. A seguir código para um procedimento que procura o nome da “constraint” e executa o “DROP” da mesma.

Como usar: Execute Procedure RDB$DELETE_PRIMARYKEY(‘produtos’);

[code]

SET TERM ^;

CREATE OR ALTER PROCEDURE RDB$DELETE_PRIMARYKEY (
tabela varchar(128))
as
declare variable nome varchar(128);
declare variable d varchar(128);
declare variable stm varchar(1024);
begin

— localiza o nome da constraint
select rdb$constraint_name from rdb$relation_constraints
where rdb$relation_name= UPPER(:tabela)
AND rdb$constraint_type=’PRIMARY KEY’
into :nome;

— monta o comando
stm = ‘ALTER TABLE ‘||:tabela||’ DROP CONSTRAINT ‘|| coalesce(:nome,’INDEF’);

if (:nome is not null) then
begin
execute statement stm;
end else
exception erro ‘Nao encontrei a chave primaria para apagar’;

suspend;
end^

SET TERM ; ^

[/code]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *