2016-07-21 6 views
0

Ich versuche, einen Trigger zu erstellen, der eine CSV-Datei von Daten an einem bestimmten Punkt in einer Anwendung ausgeben wird. Wenn Sie einen Zahlungsauftrag aus einem Zahlungsvorschlag erstellen, bedeutet dies, dass er bereit ist, bezahlt und auf die Bank hochgeladen zu werden. Es gibt einen Assistenten im ERP, der den Zahlungsauftrag aus dem Zahlungsvorschlag erstellt. Es gibt auch eine Kopf- und eine Detailtabelle für Angebote und Aufträge. Ich brauche es, um eine neue Zeile in der Zahlungsauftragstabelle zu erstellen, die new.way_id = 'ACH' und new.institute_id = 'BMO' hat.Verwenden Sie einen neuen Wert in After Trigger SQL-Anweisung

Das Problem ist der Assistent hat mehrere Schritte und fügt die Detailzeilen für die Reihenfolge bis zum letzten Schritt nicht ein, wenn Sie auf OK klicken, aber die Kopfzeile ist bereits davor erstellt und führt den Trigger aus. Aus diesem Grund werde ich beim Erstellen des Headers alle Daten aus dem Header und den Details des Angebots ziehen, da alles bereits vorhanden ist.

Wenn der Trigger ausgeführt wird, erstellt er eine SQL-Anweisung und übergibt sie dann an eine gespeicherte Prozedur, die jede SQL-Abfrage übernimmt und sie in einer CSV-Datei ablegt. Aus irgendeinem Grund kann ich die neue Referenz nicht verwenden, wenn ich meine Abfrage erstelle. Ich erhalte die Fehlermeldung "new.selected_proposals invalid identifier". Ich brauche es, um ein ähnliches zu tun, auch weil Sie mehrere Vorschlag Header-IDs auswählen können, wenn Sie eine Bestellung erstellen und ich möchte nur, dass es für die aus den Vorschlägen, die eine Way_id von ACH haben.

Ich vermute, ich muss die neue Tabelle, was auch immer es ist, in die Join oder so etwas hinzufügen, aber ich bin mir nicht sicher, wie das geht.

Dies ist Oracle-Datenbank 11g. Hier ist der Code. Der auskommentierte Abschnitt in der Abfrage ist das, was ich versuche zu beheben, nur um eine Vorstellung davon zu geben, was ich zu tun versuche.

create or replace TRIGGER CREATE_BMO_ACH_FILE 
AFTER INSERT ON PAYMENT_ORDER_TAB 
for each row 
when (new.way_id = 'ACH' and new.institute_id = 'BMO') 
declare sql_ varchar(4000); 
BEGIN 
sql_ := q'[select pp.company, pp.Proposal_id, pp.CREATION_DATE, pl.identity, pl.payee_identity, pl.ledger_item_id, pl.currency, pl.curr_amount, pl.GROSS_PAYMENT_AMOUNT, pl.PLANED_PAYMENT_DATE, pl.Order_Reference, pl.PAYMENT_REFERENCE 
    from payment_proposal pp, PROPOSAL_LEDGER_ITEM pl 
    where pp.company = pl.company 
    and pp.proposal_id = pl.proposal_id 
    and pp.way_id = 'ACH' 
    /*and pp.proposal_id like '%' || new.selected_proposals || '%'*/]'; 

    dump_sql_to_csv(sql_, 'E:\Accounting', 'test.csv'); 
END; 

Antwort

0

Ich denke, Ihr nur einen Doppelpunkt vor dem neuen heißt :new.selected_proposals verwenden fehlt. Doppelpunkte sind für old und new in WHEN nicht erforderlich, befinden sich jedoch im Codeblock.

+0

Danke, das war ein Teil des Problems. Ich musste es auch aus dem Anführungsstrang herausholen. Habe es jetzt so "und pp.proposal_id =] '||: new.selected_proposals;" und es funktioniert. Ich versuche immer noch, Ähnliches herauszufinden. Probieren Sie dies aus "und pp.proposal_id wie '%'] '||: new.selected_proposals || q' ['%'] '", aber ich bekomme eine Fehlermeldung, dass der SQL-Befehl nicht ordnungsgemäß beendet wurde. – bpfrenchak

+0

Eigentlich denke ich, ich werde es einfach so lassen, weil das nicht so funktionieren wird, wie ich es erwartet habe. Auf diese Weise funktioniert es nur, wenn sie einen Vorschlag auswählen, so wie sie es ohnehin tun sollten. Es ist nicht notwendig, mehrere Vorschläge für einen Zahlungsauftrag zu machen. – bpfrenchak