Name

MOD-05: Avoid side-effects in your programs.

Synopsis

Build lots of individual programs, preferably inside packages. Design each program so that it has a single, clearly defined purpose. That purpose should, of course, be expressed in the program’s name, as well as in the program header.

Avoid throwing extraneous functionality inside a program. Such statements are called “side-effects” and can cause lots of problems for people using your code—which means your code won’t get used, except perhaps as source for a cut-and-paste session (or—in hard-copy form—for kindling).

Example

Here’s a program that by name and “core” functionality displays information about all books published within a certain date range:

CREATE OR REPLACE PROCEDURE display_book_info (
   start_in IN DATE,
   end_in IN DATE)
IS
   CURSOR book_cur
   IS
      SELECT *
        FROM book
       WHERE date_published BETWEEN start_in
                 AND end_in;
BEGIN
   FOR book_rec IN book_cur
   LOOP
      pl (book_rec.title || ' by ' ||
             book_rec.author);
      usage_analysis.update_borrow_history (
         book_rec);
   END LOOP;
END display_book_info;

Notice, however, that it also updates the borrowing history for that book. Now, it might well be that at this point in time the display_book_info procedure is called only when the borrowing history also needs to be updated, justifying to some extent the way this program is written.

However, regardless of current requirements, the name of the program is clearly misleading; there is no way to know that display_book_info also updates borrowing history. ...

Get Oracle PL/SQL Best Practices now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.