PL/SQL procedure would do the work indeed.
Perhaps another suggestion - write a query and spool its output to an .sql file and then run it. Such as:
Code:
> set heading off;
> set feedback off;
>
> spool truncall.sql
>
> select 'truncate table ' || tname ||';' from tab where tabtype = 'TABLE';
>
> spool off;
>
> @truncall
Why 'truncate' and not 'delete'? Delete saves all the deleted records in rollback segment(s) which slows things down.
However, you might need to run this script several times due to referential integrity constraints which might prevent some tables to be truncated (you can't delete parent while child exists).