Oracle WILL let you decrease the size of a column or even change the datatype, but you cannot have any data in the column. Traditionally, you handle this by
(1) copy the data to another table:
CREATE TABLE temp_table AS SELECT primary_key_column, column_to_be_changed
FROM mytable;
(2) get rid of the data in the column to be changed:
DELETE column_to_be_changed FROM mytable;
(3) shrink the column:
ALTER TABLE mytable MODIFY column_to_be_changed VARCHAR2(6);
(4) reload the data
UPDATE mytable m SET column_to_be_changed = (SELECT column_to_be_changed
FROM temp_table t WHERE m.primary_key_column = t.primary_key_column);
(5) Get rid of the temp table:
DROP TABLE temp_table;
However, you don't have to go through all of this if you are using Oracle 8i:
(1) Create a new column:
ALTER TABLE mytable ADD COLUMN new_column VARCHAR2(6);
(2) Move the data over:
UPDATE mytable SET new_column = column_to_be_changed;
(3) Get rid of the old column:
ALTER TABLE mytable DROP COLUMN column_to_be_changed;
Of course, this simpler method has the down side of forcing you to change the column name.