La aproximación estándar más cercana a printf para Oracle que se me ocurre es utl_lms.formato_mensaje . Sin embargo, no funcionará en sentencias SQL, es decir, está bien:
begin
dbms_output.put_line(
utl_lms.format_message('hello %s, the number is %d', 'world', 42)
);
end;
/
pero esto da un ORA-00902:tipo de datos no válido error:
select utl_lms.format_message('hello %s, the number is %d', 'world', 42)
from dual