Make it a PLSQL anonymous block.. (begin .. end style)
If it's a page process, then it should work because those are bundled as one anonymous block of PL/SQL. It look perfectly valid to me.
Is there an error? Or no error but no rows deleted correctly?
The begin and end are added by default. They are not needed.
Something else must be going on here.
Jayson and Jorge are on track here. I typically build functionality like this via a form with some page items to let the user know what is going on. Think about returning the number of rows being deleted from each table or maybe display an error message if something else is going on.