It's most likely some kind of environment variable that isn't available when running the cron job. Processes running from cron don't run from a shell, so no profile has been set up. Considering that you don't have a username or password set for your Oracle connection, I'd make a guess some kind of authentication related environment setting is present when run from the shell, but not when run from cron.