4 ms·
> Triggers are implicit, have side effects and are not deterministic. > ... > A procedure call is explicit, a trigger is implicit. Method dispatch (whether the
by cryptonector 7y ago
> Triggers are implicit, have side effects and are not deterministic.
> ...
> A procedure call is explicit, a trigger is implicit.
Method dispatch (whether the language be OOP or otherwise) is also "implicit".
Think of triggers as controlled code injection.
- taffer 7y agoYou still have to call a method if you want it to do something. It doesn't simply happen as a side effect of something else. A method call only ever does one thing at a time, not multiple things in a random order. Read this if you still think triggers are a good idea: https://blogs.oracle.com/oraclemagazine/the-trouble-with-triggers https://blogs.oracle.com/oraclemagazine/the-trouble-with-tri...
- dragonwriter 7y ago> A method call only ever does one thing at a time, not multiple things in a random order. That's...not at all guaranteed if it is possible for the method call to make use of concurrency and parallelism constructs. It's actually not at all uncommon for method calls to do a unknown number of things in an unknown order (and it can even have an unknown number of them still in progress when the method returns!)
- cryptonector 7y agoExactly.
- cryptonector 7y agoYeah, and in SQL that's INSERT/UPDATE/DELETE on a table/view. Syntactically, using a stored procedure is really no different, and it can have function calls you don't know about because its body could dispatch just like triggers do. This whole thing about triggers being implied/hidden is not based on anything other than taste.
- taffer 7y ago> and it can have function calls you don't know about because its body could dispatch just like triggers do. Please give an example of a stored procedure that does something else than what the code says it will do. > This whole thing [...] is not based on anything other than taste. Good taste: Insert, update and delete doing exactly what the statement says. Procedures doing exactly what the code says. Bad taste: Insert, update and delete surprising you with magic tricks.
- cryptonector 7y ago> > and it can have function calls you don't know about because its body could dispatch just like triggers do. > Please give an example of a stored procedure that does something else than what the code says it will do. That's not what I wrote. I wrote that the caller of an SP need not know anything about the SP's body any more than the caller of a DML need not know anything about triggers. Of course that is true. And of course it's also true that the caller could know all those details in either case.
- taffer 7y agoLet's say customer 1234 wants us to delete his/her customer record, so we issue the following statement: DELETE FROM customers WHERE customer_id = 1234; The statement runs successfully and of course we would expect the customer record to be deleted, because that's what we just said, isn't it? However, the customer is still there somehow. What has happened? Was our statement wrong? It turns out our applications has triggers and by surprise the DELETE changed into UPDATE customers SET contract_status = 'terminated' WHERE emp_id = 1234; just because a few years ago someone thought that the logic of terminating a contract should be wrapped in a now long-forgotten trigger that magically transforms a straightforward DELETE into an UPDATE. If the developer had instead put the logic into a procedure like terminate_contract(customer_id), we wouldn't have had this problem in the first place.
- cryptonector 7y ago