In Oracle 9i you can use DBMS_METADATA package. It is making DDL extraction a snap even for tables DDL. An example is:
set pagesize 0
set long 90000
execute DBMS_METADATA.SET_TRANSFORM_PARAM(
DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
FROM USER_ALL_TABLES u
WHERE u.nested='NO'
AND (u.iot_type is null or u.iot_type='IOT');
execute DBMS_METADATA.SET_TRANSFORM_PARAM(
DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
It will get you the DDL for all "complete" tables in the current schema, filtering out nested tables and overflow segments.
For procedure body use 'PROCEDURE_BODY' instead 'TABLE' or 'PROCEDURE_SPEC' for procedure bodies.
Hope that helps,
clio_usa
OCP - DBA