4 Stimmen

Firebird konstanter Wert

Ist es möglich, datenbankweite Konstanten zu haben? Ich möchte eine Konstante definieren wie:

  • UPDATE_CONSTANT = 1
  • INSERT_CONSTANT = 2
  • DELETE_CONSTANT = 3

und verwenden Sie es dann zum Beispiel in einem Trigger wie:

CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
ACTIVE AFTER DELETE
POSITION 1
AS
BEGIN
   EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
END;

2voto

mjn Punkte 35903

Sie könnten einen Generator verwenden:

SET GENERATOR DELETE_CONSTANT TO 3;

...

EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', GEN_ID(DELETE_CONSTANT, 0);

Update Ja, die Verwendung eines Generators zu diesem Zweck ist gefährlich, da sie verändert werden können. In FireBird 3.0 Alpha 1 kann dieses Risiko jedoch mit Hilfe von Zugriffsrechten beseitigt werden: Gewährt Zugang zu den Generatoren .

2voto

BennyBechDk Punkte 934

Ich glaube nicht, dass es einen einfachen Weg gibt, Konstanten zu deklarieren.

Man könnte eine eigene DLL für benutzerdefinierte Funktionen erstellen und für jede Konstante eine eigene Funktion erstellen.

Ich halte die Idee, Generatoren als "globale" Konstanten zu verwenden, für brillant.

Sie können jedoch eine "lokale Konstante" erstellen, um Ihren Code etwas lesbarer zu machen:

CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
ACTIVE AFTER DELETE
POSITION 1
AS
  DECLARE VARIABLE DELETE_CONSTANT INTEGER;
BEGIN
   DELETE_CONSTANT = 1;
   EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
END;

0voto

Sie können einige einfache Preprocessor Ihrer Skripte implementieren, die Konstanten in Werte umwandeln

triggers.presql

@DELETE_CONSTANT = 1
CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
ACTIVE AFTER DELETE
POSITION 1
BEGIN
   EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
END;

auslöser.sql

CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
ACTIVE AFTER DELETE
POSITION 1
BEGIN
   EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', 1;
END;

0voto

alvaroc Punkte 382

Verwenden Sie eine einzeilige Tabelle mit Triggern, die das Einfügen und Löschen aus dieser Tabelle verhindern. Die Tatsache, dass man aus dieser Tabelle lesen muss, macht den Code sicherlich nicht klarer, aber es hilft, solche "Konstanten" zu implementieren. Entfernen Sie auch die Schreibrechte von allen außer sysdba

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X