Том говорит :
Всегда используйте пакет.
Никогда не используйте автономную процедуру
за исключением демонстраций, тестов и автономных
утилиты (которые ничего не называют и являются
ничем не называется)
Там вы также можете найти очень хорошее обсуждение их производительности. Просто найдите «производительность» на этой странице.
Если вы все еще серьезно сомневаетесь, вы всегда можете проверить себя, какой из них быстрее. Делая это, вы непременно узнаете что-то новое.
Я согласен с вашим вопросом: хотя правда, что вызов процедур / функций пакета в некоторых ситуациях кажется медленнее, чем вызов отдельных процедур / функций, преимущества, предоставляемые дополнительными функциями, доступными при использовании пакетов, значительно перевешивают потерю производительности. Итак, как сказал Том, используйте пакеты.
Ссылка: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:7452431376537
Тестовый код (20 миллионов вызовов, runstats_pkg - это пакет, который я написал на основе пакета runstats Тома Кайта ):
CREATE OR REPLACE PACKAGE testperf AS
FUNCTION pow(i INT) RETURN INT;
END;
/
CREATE OR REPLACE PACKAGE BODY testperf AS
FUNCTION pow(i int) RETURN INT AS
BEGIN
RETURN i * i;
END;
END;
/
CREATE OR REPLACE FUNCTION powperf(i INT) RETURN INT AS
BEGIN
RETURN i * i;
END;
/
DECLARE
I INT;
S INT DEFAULT 0;
BEGIN
runstats_pkg.start1;
FOR I IN 1 .. 20000000 LOOP
s := s + (powperf(i) / i);
END LOOP;
runstats_pkg.stop1;
dbms_output.put_line(s);
s := 0;
runstats_pkg.start2;
FOR I IN 1 .. 20000000 LOOP
s := s + (testperf.pow(i) / i);
END LOOP;
runstats_pkg.stop2;
dbms_output.put_line(s);
runstats_pkg.show;
END;
Результаты (Oracle XE):
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
2,491 2,439 -52 102.13%
Run1 ran in 2304 hsecs
Run2 ran in 2364 hsecs
run 1 ran in 97.46% of the time
Результаты (Oracle 11g R1, другой компьютер ):
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
2,990 3,056 66 97.84%
Run1 ran in 2071 hsecs
Run2 ran in 2069 hsecs
run 1 ran in 100.1% of the time
Итак, поехали. На самом деле не так много различий.
Хотите данные для чего-то более сложного, что также включает в себя SQL DML? Ты должен проверить это сам.