It is generally for specific use cases, and careful selection of data types that will see the most benefit, eg
SQL> CREATE OR REPLACE PROCEDURE test_speed AS
2 i simple_integer := 0;
3 v_number simple_integer := 0;
4 BEGIN
5 LOOP
6 v_number := i + 1000;
7 i := i + 1;
8 exit when i > 1000000000;
9 END LOOP;
10 END;
11 /
Procedure created.
SQL> set timing on
SQL> alter session set plsql_code_type = native;
Session altered.
SQL> alter procedure test_speed compile;
Procedure altered.
SQL> exec test_speed;
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.68
SQL> alter session set plsql_code_type = interpreted;
Session altered.
SQL> alter procedure test_speed compile;
Procedure altered.
SQL> exec test_speed;
PL/SQL procedure successfully completed.
Elapsed: 00:00:16.61
but seeing as PL/SQL is commonly used as a means of efficient *data* access, the benefits for native are perhaps smaller in the general case.