Firebird - Usunięcie Unique Key

Odpowiedz Nowy wątek
2015-01-29 18:06
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 ;^
edytowany 4x, ostatnio: lukasz_p92, 2015-01-29 18:17

Pozostało 580 znaków

2015-01-29 22:35
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ć :)

edytowany 1x, ostatnio: dzidek12, 2015-01-29 22:36

Pozostało 580 znaków

2015-01-30 13:15
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.

edytowany 1x, ostatnio: lukasz_p92, 2015-01-30 13:16

Pozostało 580 znaków

2015-01-30 15:34
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

edytowany 2x, ostatnio: dzidek12, 2015-01-30 15:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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