To implement a simple control version source on oracle package, function and procedure, we need a table and a database trigger, so you can use and ameliore this tips :
Create a table
CREATE TABLE CVS_[SCHEMA_NAME] ( CHANGE_DATE DATE, OWNER VARCHAR2(30 BYTE), NAME VARCHAR2(30 BYTE), TYPE VARCHAR2(20 BYTE), LINE NUMBER, TEXT VARCHAR2(4000 BYTE), TERMINAL VARCHAR2(50 BYTE) );
Create a trigger
CREATE OR REPLACE TRIGGER TRG_CVS_[SCHEMA_NAME]
AFTER CREATE ON DATABASE
BEGIN
INSERT INTO CVS_[SCHEMA_NAME]
SELECT SYSDATE, OWNER, NAME, TYPE, LINE, TEXT
FROM DBA_SOURCE
WHERE OWNER = ORA_DICT_OBJ_OWNER
AND NAME = ORA_DICT_OBJ_NAME
AND TYPE = ORA_DICT_OBJ_TYPE
AND OWNER = [SCHEMA_NAME];
END TRG_CVS_[SCHEMA_NAME];