DO the column name and their datatype goin to be an input paramater from and procedure???

-- TO ADD A NEW COLUMN. IF THE INPUT COLUMN_NAME DOESN'T EXIST.

DECLARE
P_TABLE_NAME VARCHAR2(30) := 'TEST';
P_INPUT_COL_NAME VARCHAR2(75) := 'COL1';
P_COL_DATA_TYPE VARCHAR2(30) := 'NUMBER(9)';
BEGIN

SELECT COUNT(COLUMN_NAME) INTO COL_EXIST_CNT FROM ALL_TAB_COULMNS
WHERE OWNER = 'JEGAN' AND TABLE_NAME = P_TABLE_NAME AND COULMN_NAME = P_INPUT_COL_NAME;

IF COL_EXIST_CNT = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE ' || P_TABLE_NAME || ' ADD ' || P_INPUT_COL_NAME || P_COL_DATA_TYPE;
END IF;
END;

-- TO MODIFY A COLUMN. IF THE INPUT COLUMN'S DATATYPE DOESN'T MATCH WITH THE EXISTING ONE.

DECLARE
P_TABLE_NAME VARCHAR2(30) := 'TEST';
P_INPUT_COL_NAME VARCHAR2(30) := 'COL1';
P_COL_DATA_TYPE VARCHAR2(30) := 'NUMBER(9)';
BEGIN

SELECT COUNT(COLUMN_NAME) INTO COL_EXIST_CNT FROM ALL_TAB_COULMNS
WHERE OWNER = 'JEGAN' AND TABLE_NAME = P_TABLE_NAME AND COULMN_NAME = P_INPUT_COL_NAME AND DATA_TYPE != P_COL_DATA_TYPE;

IF COL_EXIST_CNT = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE ' || P_TABLE_NAME || ' MODIFY ' || P_INPUT_COL_NAME || P_COL_DATA_TYPE;
END IF;
END;

hope this gives u some idea...

Cheers!