Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 6 Nächste Version anzeigen »

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.

Datenbanktypen

(Administration - Datenbank - Datenbanktypen)
Sonstiges datenbankobjekt 1.gif

Hier sind die unterstützten Datenbanksysteme aufgelistet. Es können Objekte für die jeweiligen Datenbanksysteme auch mehrfach angelegt werden, um z.B. ein System von einer Datenbank auf eine andere zu portieren. Es werden immer die Datenbankobjekte vom jeweils eingesetzten Datenbanksystem herangezogen.

Datenbankobjekte

(Administration - Datenbank - Datenbankobjekte)

Sonstiges datenbankobjekt 2.gif

Zunächst muss ein Datenbankobjekt angelegt und ein entsprechender Typ zugewiesen werden. Es stehen folgende Typen zur Auswahl:

  • function
  • package
  • package body
  • procedure
  • view

Bitte beachten Sie, wenn eine Function für ein berechnetes Attribut eingesetzt werden soll, muss der Name des Datenbankobjektes mit CA_ beginnen. Nur diese Objekte stehen in der Auswahl einer Berechnungsvorschrift im Entitätenwizard zur Verfügung.

Datenbankobjekt-Quelltexte

(Administration - Datenbank - Datenbankobjekt-Quelltexte)

Sonstiges datenbankobjekt 3.gif

In dieser Maske wird der eigentliche Quelltext des Datenbankobjektes eingetragen. Wenn Aktiv gesetzt, wird das Objekt beim Speichern in der Datenbank generiert oder aktualisiert. Der Quelltext stellt den DB-spezifischen Code dar. Dabei ist die entsprechende Syntax zu beachten. Beim Speichern wird der Schema- oder Datenbankname entsprechend der aktuellen Datenbankverbindung automatisch vor den Namen der Function gesetzt, z.B. nuclos.GET_NEXT_NUMBER(...). Sie dürfen diesen daher an dieser Stelle nicht setzen. In der Löschanweisung kann das entsprechende Statement eingetragen werden. Es wird ausgeführt, wenn der Datensatz aus Nuclos gelöscht wird.

Rümpfe für Functions

PostgreSQL

CREATE OR REPLACE FUNCTION <name>(imoduleid numeric)
  RETURNS numeric AS
$BODY$
 
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Beispiel:

 

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:

 

DROP FUNCTION IF EXISTS GET_NEXT_NUMBER(imoduleid numeric) CASCADE

Oracle

CREATE OR REPLACE 
FUNCTION <name>(imoduleid numeric) RETURN number IS
  <variable>
 
end <name>;

Beispiel:

 

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;

SQLServer

Beispiel:

Sysbase

ALTER FUNCTION "<name>" (@iModuleId numeric(9)) RETURNS INT 
AS BEGIN
 
END

Beispiel:

ALTER FUNCTION "CA_GET_VORGANGSNUMMER" (@projektnummer numeric(20), @vorgangstyp VARCHAR(30)) RETURNS INT 
AS BEGIN
  declare @nummer  numeric(20)
  declare @counter numeric(20)
 
   SELECT @counter = COUNT(*)
     FROM t_ad_hertwich_vorgangsnr
    WHERE projektnr = @projektnummer AND TYP = @vorgangstyp
 
   IF @counter = 0
        BEGIN 
            RETURN 0
        END
  SELECT @nummer = t1.vorgangnr
  FROM
      t_ad_hertwich_vorgangsnr t1
  WHERE t1.projektnr = @projektnummer AND t1.typ = @vorgangstyp
 
  RETURN @nummer
END

Beispiel 2 (PostgreSQL):Berechnet die Anzahl aller Bestellwerte, die noch keine Rechnungen oder Lieferscheine enthalten. Diese Berechnung wird anhand eines Dynamischen Businessobjekt durchgeführt und es wird somit auf die View zugegriffen. Der Übergabeparameter id stellt in die INTID von dem aktuellen Objekt dar. Dieses wird automatisch an die Funktion mit übergeben.

CREATE OR REPLACE FUNCTION CA_BESTELLWERTGESAMT(id numeric)
  RETURNS numeric AS
$BODY$
DECLARE
    summe numeric (15, 2);
BEGIN
 
   SELECT SUM(bestellwert) INTO summe
   FROM v_de_bestellungen
  WHERE intid_t_ud_genericobject = id;
 
   RETURN summe; 
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

 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

CREATE OR REPLACE FUNCTION CA_<functionname>(id numeric)
  RETURNS numeric AS
$BODY$
 
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Oracle

CREATE OR REPLACE FUNCTION CA_<functionname>(id IN number) RETURN varchar2 IS
 
end CA_<functionname>;
  • Keine Stichwörter