DJTank Geschrieben 24. Januar 2006 Teilen Geschrieben 24. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 24. Januar 2006 Teilen Geschrieben 24. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 24. Januar 2006 Autor Teilen Geschrieben 24. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 24. Januar 2006 Teilen Geschrieben 24. Januar 2006 du wirst halt noch etwas rumexperimentieren müssen, z.b. die variablendeklaration auf CHAR und die INSERTs sowie die EXCEPTION anpassen. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 24. Januar 2006 Autor Teilen Geschrieben 24. Januar 2006 du wirst halt noch etwas rumexperimentieren müssen, z.b. die variablendeklaration auf CHAR und die INSERTs sowie die EXCEPTION anpassen. s'Amstel Bin schon dran Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 25. Januar 2006 Autor Teilen Geschrieben 25. Januar 2006 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,...) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
tuxfriend Geschrieben 27. Januar 2006 Teilen Geschrieben 27. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 29. Januar 2006 Autor Teilen Geschrieben 29. Januar 2006 Dank dir vielmals Aber ich habe das Problem bereits mit einer simplen Abfrage gelöst, die gar nicht mit meiner ursprünglichen Idee zu tun hatte Gruß Steve Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.