I have found a workaround for this problem.
Idea is to silent all exceptions and tried twice same operations-delete and create collection!!
--"ORA-20104: create_collection_from_query"
BEGIN
APEX_COLLECTION.DELETE_COLLECTION (p_collection_name=>'HIST_ONE_SEGMENT_COLL');
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY (
p_collection_name => 'HIST_ONE_SEGMENT_COLL',
p_query => 'SELECT * FROM ... '
);
EXCEPTION
WHEN OTHERS THEN
BEGIN
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY (
p_collection_name => 'HIST_ONE_SEGMENT_COLL',
p_query => 'SELECT * FROM ... '
);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END;
In mine case this works on 11g as well as 10g databases with Apex 4.02.