Steven, I have taken your advice about writing SQL statements to heart (don’t write SQL in application-level code; hide them behind a packaged API, with as much of it generated as possible). I also decided (and I am the team leader so my decision carries some weight) to go the full route and I revoked privileges on the tables, so my developers have no choice but to use the encapsulation packages.
Here’s my problem: another of your best practices is to avoid hard-coded declarations and anchor variables back to database tables and columns with %TYPE and %ROWTYPE. But my people can’t do that – because I revoked privileges, and they need SELECT on a table to do that.
What’s a best practice-oriented guy supposed to do?