A aproximação padrão mais próxima de printf para Oracle que consigo pensar é utl_lms.format_message . No entanto, não funcionará em instruções SQL, ou seja, tudo bem:
begin
dbms_output.put_line(
utl_lms.format_message('hello %s, the number is %d', 'world', 42)
);
end;
/
mas isso dá um ORA-00902:tipo de dados inválido erro:
select utl_lms.format_message('hello %s, the number is %d', 'world', 42)
from dual