2016-09-01 3 views
0

Ich verwende Oracle APEX, um einen interaktiven Bericht zu erstellen. Auf der Erstellungsseite möchte ich ein Feld namens create_time in der Datenbank inertisieren, das auf der Erstellungsseite nicht angezeigt wird. Auf der Bearbeitungsseite möchte ich ein Feld namens update_time in der Datenbank aktualisieren.Fehler beim Erstellen der Erstellungszeit im APEX-Bericht

Für die Edit-Seite, habe ich einen Prozess und stellen Sie den plsql Code:

update table_test t set t.UPDATE_DATE = sysdate 
     where t.ROWID = :P2_ROWID; 

Und das funktioniert.

Wenn es jedoch auf die Seite schaffen kommt, habe ich den plsql Code:

update table_test t set t.CREATE_DATE = sysdate 
     where t.PROJECT_ID= :P3_PROJECT_ID; 

Dies funktionierte nicht. Dann habe ich die where-Klausel folgendermaßen festgeschrieben: where t.PROJECT_ID = '100', und ich erstelle ein Projekt mit id = 100, und es funktioniert! Also nehme ich an, aus irgendeinem Grund: P3_PROJECT_ID konnte den Wert nicht abrufen. Wer weiß warum? Und gibt es andere Möglichkeiten, create_time einzufügen, als den Prozess zu verwenden? Vielen Dank!

Antwort

1

Der Grund ist, dass APEX den Wert von: P3_PROJECT_ID nicht kennt, es sei denn, Ihr Prozess verwendet ID als PK und gibt den PK-Wert zurück.

Eine viel einfachere Möglichkeit für beide Create/Update-Spalten ist so einen DB-Trigger für die Tabelle zu erstellen, die jedes Mal ausgelöst wird, wenn ein Datensatz eingefügt/aktualisiert wird, einschließlich von SQL Workshop oder außerhalb von APEX. Installieren Sie eine der Beispiel-Apps und sehen Sie sich die Trigger in den Tabellen für Best Practices an.