Donnerstag, 23. Februar 2017

Be or not - for a table row

In all meinen Datenbankprojekten habe ich das Datenbankschema in der 3. Normalform mit vielen Fremdschlüsseln verwendet. Wenn Sie Formulare erstellen, um die Programmdaten zu pflegen, wird normalerweise eine Löschen Button hinzugefügt. Falls Sie eine Seite vom Typ 'DML Form' mit einem 'Delete' Button erstellt haben, wird diese Schaltfläche für jede vorhandene Zeile angezeigt.
Wenn der Anwendungsbenutzer versucht, eine Zeile zu löschen, die direkt oder indirekt in einer untergeordneten Tabelle referenziert wird die durch einen Fremdschlüssel mit einer delete_rule von Typ 'NO ACTION' ist, dann wird das System einen ORA-02292 Fehler zurückgeben.
Ich denke, es wäre besser, den Löschen Button nicht anzuzeigen, wenn die Zeile existieren muss.
Um dieses Problem zu lösen, habe ich die Ansicht V_DELETE_CHECK geschrieben.
Für jede Tabelle im aktuellen Schema erzeugt die Ansicht eine Unterabfrage, die mit einem gegebenen Tabellennamen und einem Primärschlüsselwert testen kann, ob die Zeile löschbar ist oder nicht. Die Ansicht unterstützt tiefe Hierarchien von delete cascading rules, Es unterstützt zusammengesetzte Fremdschlüssel und rekursive Beziehungen wie Baum Tabellen.

Jetzt können Sie dieses Plugin verwenden, um die Löschtaste zu verbergen, wenn eine Tabellenzeile nicht gelöscht werden kann.

---

In all of my database projects, i have used database schemata in the 3. normal form with lots of foreign keys. When you produce forms to maintain the program data, usually a delete button is added. In case you have created a page of type 'DML Form' with a 'Delete' Button, then this button is shown for each existing row.
When the application user tries to delete a row that is referenced directly or indirectly in a child table
by a foreign key with a delete_rule of 'NO ACTION', then the system will return an error. The "ORA-02292: integrity constraint <constraint name> violated - child record found" error message. I think it would be better to not show the delete button when the row must exit. To solve this problem, I have written the view V_DELETE_CHECK. For every table in the current schema, the view produces a subquery that can test a given table_name and primary key value, whether the row is deletable or not. The view support deep hierarchies of on delete cascading rules, It support composite foreign keys and recursive relations like tree tables.

Now you can use this plugin to hide the delete button when a table row can not be deleted.

today I have released my first apex plugin on apex.world.
strack-software-delete-check-plugin