Firebird - Usunięcie Unique Key

0

Witam,
chciałbym usunąć Unique Key i zamiast tego dodać do kolumny Primary Key w bazie Firebird.
Jedyne co znalazłem to stworzenie od nowa tabeli, ale to mi nie odpowiada.

Mógłby ktoś pomóc ?

SKRYPT

 
/* Table: TABELA_A, Owner: SYSDBA */

CREATE TABLE TABELA_A
(
  ID_A	INTEGER NOT NULL,
  ID_B	INTEGER NOT NULL,
  ID_C	INTEGER NOT NULL,
  NR_        CHAR(30),
 UNIQUE (ID_A)
);
ALTER TABLE TABELA_A ADD FOREIGN KEY (B) REFERENCES Tabela_B (B);
ALTER TABLE TABELA_A ADD FOREIGN KEY (C) REFERENCES Tabela_C(C);

/* Triggers */

SET TERM ^ ;

CREATE OR ALTER TRIGGER SET_ID_A FOR TABELA_A
ACTIVE BEFORE INSERT POSITION 0
AS

begin
  IF (NEW.ID_A IS NULL) THEN NEW.ID_A= GEN_ID(GEN_TABELA_A, 1);
end
 ^

SET TERM ;^
1

Proszę:

/* usuwanie UNIQUE */
execute block as
declare variable fName varchar(50);
begin
 select first 1 rdb$constraint_name
 from rdb$relation_constraints
 where upper(rdb$relation_name)='TABELA_A'
   and upper(rdb$constraint_type)='UNIQUE'
 into :fName;

 if (coalesce(:fName,'')<>'') then
  execute statement 'alter table tabela_a drop constraint '||:fName;
end;
commit;


/* zakladanie PRIMARY KEY*/
ALTER TABLE TABELA_A
ADD CONSTRAINT PK_TABELA_A
PRIMARY KEY (ID_A);

Mała rada: składnia tego nie wymaga, ale jak tworzysz Constraint'y dla tabel to nadawaj im (swoją) nazwę, wtedy będzie Ci łatwiej je w przyszłości modyfikować :)

0

Dziękuję za odpowiedź.

Niestety otrzymuję błędy:

 
Statement #1:
Dynamic SQL Error
SQL error code = -104
Unexpected end of command - line 2, column 34

Statement #2:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, column 1
BEGIN

Statement #3:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 3, column 2
IF

Statement #4:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, column 1
END

Do zobrazowania bazy używam
Mitec interbase query, z strony
<ort> http://www.mitec.cz/ibq.html </ort>
Ale to raczej nie ma większego znaczenia.

0

W czym to uruchamiasz?
IBExpert,IBConsola,isql czy cosik jeszcze innego?
I jaki masz dialect bazy?

Masz takie opcje:

case (Program) of
  IBExpert: to odpal to jako skrypt(Ctrl+F12);
  IBConsole: nie zadziała bo IBConsola nie "rozumie" składni execute block;
  isql: uruchom jako skrypt wczytany z pliku;
  Delphi,
  Lazarus: użyj TIBScript, tylko z treści usuń commit;
 else
  napisz co używasz, to pomyślimy;
end;

:D

1 użytkowników online, w tym zalogowanych: 0, gości: 1