Esto no lo puedes resolver con una SEQUENCE, si quieres que el valor de id_con sea correlativo y además se reinicie en función del valor de id_of, entonces tendrás que desarrollar tu propio control de secuencias, por ejemplo:
Código:
create table conceptos(
id_of varchar2(20),
id_con varchar2(20)
);
--tabla seq guarda las secuencias
--para cada id_oferta
create table seq(
seq_name varchar2(20),
seq_value number(8)
);
--función para obtener la sequencia
--de cada id_oferta
create or replace function
next_val (sequence_name varchar2)
return number
as
valor number(8);
existe number(8);
begin
select count(*) into existe
from seq
where seq_name = sequence_name;
if (existe = 0) then
insert into seq values (sequence_name,0);
end if;
update seq
set seq_value = seq_value + 1
where seq_name = sequence_name
returning seq_value into valor;
return valor;
end;
/
--insertar algunos valores
insert into conceptos values
('GIA-018-A-12', next_val('GIA-018-A-12') );
insert into conceptos values
('GIA-018-A-12', next_val('GIA-018-A-12') );
insert into conceptos values
('GIA-018-A-13', next_val('GIA-018-A-13') );
--resultado
select * from conceptos;
ID_OF ID_CON
-------------------- --------------------
GIA-018-A-12 1
GIA-018-A-12 2
GIA-018-A-13 1
--reiniciar la secuencia de un id_oferta
update seq set seq_value = 0
where seq_name = 'GIA-018-A-12';
Pero debes considerar los posibles problemas de rendimiento en entornos de alta concurrencia, ya que el bloqueo sobre la tabla seq hace que los insert sobre la tabla conceptos se resuelvan uno por vez, por lo que solo deberías implementar este tipo de solución cuando los valores de la secuencia son parte de los requerimientos del sistema y no una cuestión estética.
Saludos