Page 270
At the time I wrote this, I really had a weak understanding of the data dictionary views. After analyzing and playing around with them, creating objects and then seeing what the different results were, I really gained an appreciation for them. My enthusiasm level was very high after completing this project. It really made me think. The DDL syntax for many of these database objects is very rich and complex. In order to understand how constraints work, and how the rev_pkeys, rev_ukeys, rev_fkeys, and rev_checks procedures work, create these constraints and see what data is stored in dba_constraints (the constraint name and type), dba_cons_columns (the constraint columns), and dba_indexes (for the index and storage parameters).
Some issues not implemented are how to handle disabled constraints (the storage parameters for the related index are blank, which is really a syntax error you have to add them manually), clusters (not done), tablespaces (not done), users (not done), and so on.
I've found this a very handy utility, especially for old legacy applications whose DDL files have long been deleted or outdated. I encourage you to examine it, try it, and hopefully take something from it to use in your own PL/SQL masterpieces.
The last item I feel I need to point out is actually not part of the package proper, but rather follows it. The grant and synonym created for it make the package available to all.
GRANT EXECUTE ON rev_eng TO PUBLIC; CREATE PUBLIC SYNONYM REV_ENG FOR REV_ENG;
It's a very good idea to include these items here, so that you document for whom the package is intended and manage privileges locally to the module. This will save you and all following DBAs that much trouble later on.