Вы помещаете код для процедур, функций и т. Д. В тело пакета вместе с объявлениями для частных переменных. Вы помещаете объявления этих процедур и функций, а также публичные переменные в пакет. Только последние доступны из-за пределов пакета, и для этого вам нужно добавить их имена к имени пакета и точке.
Вы также можете определить типы структуры данных для этого пакета: если публичные процедуры используют их в качестве входных или выходных данных, то они должны быть обнародованы; если нет, то вы можете выбирать.
Пример кода из памяти и не проверен, поэтому в нем могут быть ошибки:
create or replace package foo as
a number;
function test1(s1 in varchar2) return varchar2;
procedure test2(i1 in integer);
end;
/
create or replace package body foo as
b number; -- internal only
function internalfunc(s in varchar2) return varchar2;
function test1(s1 in varchar2) return varchar2 is
s varchar2(32000);
-- variables ...
begin
-- code ...
return internalfunc(s);
end;
procedure test2(i1 in integer) is
-- variables ...
begin
-- code ...
end;
function internalfunc(s in varchar2) return varchar2 is
begin
return INITCAP(LOWER(s));
end;
end;
/
Используйте foo.a
, foo.test1
и т. Д. Для использования этих функций и переменных. Вы не можете получить доступ к внутренним функциям извне пакета. Их нужно объявлять в начале пакета только в том случае, если они вызываются выше, чем их реализация.
Пакеты имеют дополнительное преимущество по сравнению с простыми функциями и процедурами: вы можете перегружать их имена, иметь несколько разных процедур с одинаковыми именами, но с разными типами параметров в одном пакете, и в зависимости от того, какие типы параметров будут вызываться соответствующие функции ты используешь. Напротив, имя для отдельной функции или процедуры должно быть уникальным.
НТН.