Datenbank-Update unter ORACLE

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Hintergrund

(Ab Version 7.0.170815)

Oracle© versteht unter Datenbank einen User/ein Schema (z.B. "GEVASPRO"). In der GEVAS-Professional Konfiguration kann man optional ein Präfix angeben (z.B. "GEVASPRO." , mit Punkt!), um auf verschiedene Datenbanken zuzugreifen. An manchen Stellen im Programm wurde dieses Präfix aber nicht eingesetzt. Das hatte die Konsequenz, dass z.B. ein Datenbank-Update nicht für den User/das Schema durchgeführt wurde sondern für das System-Schema.

Wenn man mit Oracle-Synonymen arbeitet (und kein Präfix angibt), trat diese Problem nicht auf.


2 SQL-Script

Im SQL-Script für das Datenbank-Update werden die Objekte (Tabelle, Trigger usw.) mit einer führenden Tilde ~ angegeben.

Beispiel:

CREATE TABLE ~BESTRUECKAN
(  
	ID NUMBER (10,0) NOT NULL, 
	BESTNR NUMBER (10,0) NOT NULL,
	ADRESSE varchar2(160) NULL, 
	STR varchar2(40) NULL,
	LANDKENNZ varchar2(10) NULL,
	PLZ varchar2(10) NULL,
	ORT varchar2(40) NULL,
	LAND varchar2(40) NULL,
	SPRACHE varchar2(1) NULL,
	TOUR varchar2(10) NULL,
	ID_STRING varchar2(30) NULL,
	TransportZonen_ID NUMBER (10,0) DEFAULT 0,
	AendDat date NULL,
	AendUser varchar2(20) NULL
)
/

GRANT  REFERENCES ,  SELECT ,  update ,  INSERT ,  DELETE ON ~BESTRUECKAN TO public
/

CREATE SEQUENCE ~BESTRUECKAN_ID_SEQ
START WITH 1
INCREMENT BY 1
MAXVALUE 9999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER
/

CREATE TRIGGER ~BESTRUECKAN_ID_TR BEFORE INSERT
ON ~BESTRUECKAN
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT BESTRUECKAN_ID_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
/

CREATE UNIQUE INDEX ~BESTRUECKAN_BESTNR ON ~BESTRUECKAN(BESTNR)
/

Das Programm ersetzt die Tilde zu Laufzeit dann mit dem angegebenen Präfix, also wenn das SQL-Script ausgeführt wird.

Wenn man im Datenbank-Update-Assistenten die Option "Script nicht ausführen, in Datei speichern" wählt, enthalten alle Tabellen, Trigger, Indizes usw. dieses Zeichen ~.

Bevor Sie das Script in einem externen Tool ausführen, müssen Sie die Tilde ~ im Script ersetzen durch:

  • Einen Schema-Namen
  • Nichts, wenn Sie mit Synonymen arbeiten.

Wenn man mit mehreren Datenbanken arbeitet und das Script mehrfach mit unterschiedlichen Schemas ausführen muss, erleichtert die Tilde das ersetzen in das jeweilige Schema.

3 Links