Zum Inhalt springen

Eindeutigkeit in Oracle ohne PK/UK erzwingen


DJTank

Empfohlene Beiträge

Hallo Leute,

folgendes Problem brachte mir keine Erfolge bei Anwendung der Suchfunktion ;)

Ich habe hier eine Standardsoftware, welche eine Oracle-DB als Backend verwendet.

Es geht darum, dass in dieser Tabelle drei Arten von Konten gespeichert sind.

- Sachkonten

- Debitoren

- Kreditoren

Nun ist eh klar, dass es sich um eine Buchhaltungssoftware handelt *g*

Die Tabelle hat ein Feld "Klasse" und ein Feld "Matchcode", welche EDV-technisch zusammen keine Eindeutigkeit erzeugen.

Nun speichert unsere Firma im Feld Matchcode die eindeutige Personenbezeichnung (für Debitoren und Kreditoren), was jedoch bedeutet, dass im Falle eines Sachkontos das Feld Matchcode immer leer ist.

Nun bräuchte ich einen Schutz, damit jeweils nur EIN Debitor mit dem selben Matchcode und EIN Kreditor mit dem selben Matchcode in der Buchhaltung eingegeben werden kann.

Wie löse ich die Sache am besten, wenn es mir unmöglich ist PK bzw. UK einzusetzen? Ist ein Trigger die beste Lösung oder gibt es intelligentere Alternativen?

Über eine Hilfestellung wäre ich sehr froh, ich danke euch.

Gruß

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

hast du die erlaubnis bzw. kannst du ein DESC TABLE hier reinposten?

wenn du es mit trigger löst, wird dieser vermutlich bei einfügen und aktualisieren-aktionen auslösen müssen. hab mal versucht einen trigger zu bauen, weiss aber nicht, wie deine tabelle wirklich aufgebaut ist.

CREATE OR REPLACE TRIGGER KAG_CN.TRG_KONTEN

BEFORE INSERT OR UPDATE

ON MEINBUCHHALTUNGSSCHEMA.KONTEN

REFERENCING NEW AS New OLD AS Old

FOR EACH ROW

DECLARE

tmpMatchcode VARCHAR2(30);

BEGIN

   tmpMatchcode := '';


   select matchcode, debitor, kreditor from konten into 

      tmpMatchcode where matchcode = :OLD.matchcode;

   if tmpMatchcode = <kriterium> and debitor is not null then

   	  insert into konten (matchcode,debitor) values (tmpMatchcode, :NEW.debitor);

   end if;

   if tmpMatchcode = <kriterium> and kreditor is not null then

   	  insert into konten (matchcode,kreditor) values (tmpMatchcode, :NEW.kreditor);


   EXCEPTION

     WHEN OTHERS THEN

       RAISE;

END ;

/ 

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Woah das nennt man Hilfestelltung, schonmal ein riesen Dankeschön für deinen Aufwand :)

Hier der desc der Tabelle:

Name                                      Null?    Typ

----------------------------------------- -------- -----------

DVKONTONUMMER                             NOT NULL NUMBER(10)

KLASSE                                    NOT NULL CHAR(1)

KONTONUMMER                               NOT NULL CHAR(12)

FILIALE                                            CHAR(3)

BEZEICHNUNG                               NOT NULL CHAR(35)

BEZEICHNUNG2                                       CHAR(35)

MATCHCODE                                          CHAR(20)

BERECHTIGUNG                                       CHAR(1)

OPKONTO                                            NUMBER(10)

BUCHENGESPERRT                                     NUMBER(10)

LOESCHENVORGEMERKT                                 NUMBER(10)

LETZTEKTOSEITE                                     NUMBER(10)

BEZEICHNUNGALT                                     CHAR(35)

BEZEICHNUNG2ALT                                    CHAR(35)

BEZALTGUELTIGBIS                                   DATE

GEAENDERTAM                               NOT NULL DATE

GEAENDERTVON                              NOT NULL CHAR(4)

ZFSALESENGINEER                                    CHAR(12)

ZFPREISLISTHACOS                                   CHAR(12)

ZFKLEINMENGEGRENZE                                 NUMBER(7,2)

ZFRECHNUNGSKOPIEN                                  NUMBER(10)

ZFRABATTZEILE                                      CHAR(12)

ZFWAHRUNG                                          CHAR(3)

Werde den Trigger gleich mal austesten.

Gruß

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun habe ich ein Problem,

wenn ich einen derartigen Trigger da raufsetze, dann bekomme ich schon beim Anlegen einer neuen Person in der Buchhaltung einen Oracle-Fehler, dass keine Daten für einen "INSERT" vorhanden seien.

Scheinbar steckt da in der Buchhaltungssoftware ein ungünstiger Vorgang für das Beschreiben der Tabellen dahinter.

Vorschläge, wie man so etwas lösen könnte?

Anbei die Fehlermeldung:

ORA-01403: Keine Daten gefunden



INSERT INTO SA900.Konto(Klasse, DVKontonummer, BezeichnungsAlt, ...) VALUES (:P1,:P2,P3,...)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

dieser Fehler tritt normalerweise dann auf, wenn du aus einem Cursor alle Records gelesen hast.

Möglich, dass ein select into, das kein Ergebnis liefert auch eine solche Exception verursacht.


   select matchcode, debitor, kreditor from konten into 

      tmpMatchcode where matchcode = :OLD.matchcode;

Dann könnte der Fehler in dieser Anweisung liegen und zwar wenn kein Datensatz mit matchcode = :OLD.matchcode zurückgegeben wurde.

Das würde ich erstmal testen.

Ansonsten poste doch bitte mal den Code deines Triggers.

Gruß

Nils

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...