Seitenhistorie
Inhalt | ||
---|---|---|
|
Definition
Menüaufruf: (Konfigurations) - (Datenbank) - (Datenbankobjekte)
Datenbankobjekte werden benötigt, um benutzerdefinierte Views, Funktionen, Prozeduren usw. als Teil eines Nuclets zu konfigurieren. Bei einem Nuclettransfer werden diese Objekte dann entsprechend mit übernommen.
Datenbankobjekte und Datenbankobjektquelltexte bieten die Möglichkeit, innerhalb von Nuclos mittels SQL ergänzende Datenbankobjekte anzulegen (z.B. Datenbankfunktionen für berechnete Attribute, Views für virtuelle Businessobjekte, Packages für Jobs in Nuclos, etc.). Da insbesondere unter PostgreSQL Abhängigkeiten zwischen Datenbankobjekten dazu führen, dass Objekte, von denen andere abhängig sind, weder gelöscht noch geändert werden können. Daraus kann insbesondere resultieren, dass Objekte z.B. beim Nucletimport, nicht aktualisiert werden.
Aus diesem Grund existiert in den Datenbankobjekten (seit Nuclos 3.10) ein Feld "Reihenfolge", mit der der Ersteller die Abhängigkeit festlegen kann. Beim Ändern eines Datenbankobjektquelltextes oder beim Nuclettransfer werden alle Objekte in absteigender Reihenfolge gelöscht und in aufsteigender Reihenfolge wieder angelegt. Voraussetzung dafür ist, dass in jedem Datenbankobjekt ein "Löschstatement" (letztes Feld in der Maske "Datenbankobjektquelltext") angelegt ist, welches Nuclos heranzieht, um die Löschung durchzuführen (z.B. "DELETE FUNCTION...").
Dieses Vorgehen liefert auch ein gutes Indiz dafür, ob nach Änderungen einzelner Datenbankobjekte alle Datenbankobjekte weiterhin fehlerfrei zusammenspielen, der erfolgreiche Abschluss des vollständigen Löschens und Erstellens wird mit einer entsprechenden Erfolgsmeldung quittiert.
...
Codeblock |
---|
CREATE OR REPLACE FUNCTION <name>(imoduleid numeric) RETURNS numeric AS $BODY$ $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; |
Beispiel:
Codeblock |
---|
CREATE OR REPLACE FUNCTION GET_NEXT_NUMBER(imoduleid numeric) RETURNS numeric AS $BODY$ DECLARE iresult NUMERIC (20, 0); BEGIN SELECT intnaechstenummer INTO iresult FROM t_eo_nummern WHERE strbezeichnung = 'Kundennummer'; RETURN iresult; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; |
Beispiel für Löschanweisung:
Codeblock |
---|
DROP FUNCTION IF EXISTS GET_NEXT_NUMBER(imoduleid numeric) CASCADE |
...
Codeblock |
---|
CREATE OR REPLACE FUNCTION <name>(imoduleid numeric) RETURN number IS <variable> end <name>; |
Beispiel:
Codeblock |
---|
CREATE OR REPLACE FUNCTION "CA_ANZAHL_POSITIONEN"(id IN number) RETURN number IS nummer number(15); begin SELECT count(*) INTO nummer FROM t_eo_auftrag_positionen t1 WHERE intid_strreferenz=id; RETURN nummer; end CA_ANZAHL_POSITIONEN; |
...
Achtung: Bei PostgreSQL muss immer eine Löschanweisung mit angegeben werden, die für den Fall der Löschung des Berechnetem Attribut greifen kann.
Function Rumpf
PostgreSQL
Codeblock |
---|
CREATE OR REPLACE FUNCTION CA_<functionname>(id numeric) RETURNS numeric AS $BODY$ $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; |
...