Also, the fact that you have to remember the order of these parameters when you use the function, and that default values are not supported is a real pain.
I wrote a package that handles all this. The package even writes out the new, update and delete functions.
More information can be found in this thread:
https://openacs.org/bboard/q-and-a-fetch-msg.tcl?msg_id=00046k&topic_id=12&topic=OpenACS%204%2e0%20Design