You can obfuscate PL/SQL that is stored in the database. There is a wrap utility. Go to http://tahiti.oracle.com/ and search on "wrap ulility" and then select the database version you're running. The PL/SQL user's guide and reference has a chapter on obscuring source code.
From reading your question though, it sounds like you want to obscure more than just your code. You can encrypt data with DBMS_CRYPTO. Your routines could depend on that and you can decrypt it when you use it. That could add a lot of overhead though so I wouldn't recommend it.
If you want to obscure tables, views, etc., I know if no way to do that. You could give your tables and columns really bad names like "table1" and "column1" but I wouldn't recommend that either.
If you're trying to protect your intellectual property, it's a tough call. But if you're just trying to keep your application from being hacked, proper security will protect you more than obfuscation will.
This was first published in December 2005