For individual existing stored procedures and packages the alter procedure owner.proc_name compile would work. Code changes and new code could be syntax checked via create or replace, but I think the question is really concerned with anonymous pl/sql code.
Taking anonymous code and placing it in a create procedure statement seems a potential approach to the problem of checking the syntax without running the code.
It seems like I ought to know another way but nothing else comes to mind except that testing the code is what a test environment is for. Also small chunks of code can be placed in anonymous pl/sql scripts as procedures and called. DLM can be pointed at private copies of the tables or commented out so the code can be repeated.
HTH -- Mark D Powell --