Според мен динамичният PL/SQL блок е донякъде неясен. Макар че е много гъвкав, също така е труден за настройка, труден за отстраняване на грешки и труден за разбиране какво става. Моят глас отива за първата ви опция,
EXECUTE IMMEDIATE v_query_str INTO v_num_of_employees USING p_job;
И двете използват променливи за свързване, но първо, за мен, е по-редуируемо и настройваемо от опцията @jonearles.