Я прочитал несколько книг программирования PL SQL, и они рекомендуют мне группировать процедуры, функции, курсоры и т. Д. В пакете. Пакеты обеспечивают модульность и скрытие информации, что является дизайном OO. Тем не менее, я просто знаком с отдельными процедурами. Кто-нибудь любезно предоставит несколько примеров кода и как вызвать пакет от клиента? В настоящее время я использую ODP.NET в качестве доступа к данным в клиентском приложении. Спасибо.Oracle - Использование пакета
ответ
Если вы знакомы с вызовами отдельных процедур, процедуры вызова в пакетах не очень разные. Просто префикс имени процедуры с именем пакета следующим образом: имя_пакета.процедура_имя.
Чтобы следить, вы можете иметь автономные как
create or replace procedure foo (i_something in varchar2) as
begin
-- do some stuff;
end foo;
, которую вы называете с "Foo ('бар');"
Это станет пакет и тело пакета, как
create or replace package my_package as
procedure foo (i_something in varchar2);
end;
create or replace package body my_package as
procedure foo (i_something in varchar2);
begin
-- do some stuff;
end foo;
end my_package;
, которую вы называете с «my_package.foo („бар“);»
Для одной процедуры использование пакета может не придавать большей ясности. Но если вы имеете дело с множеством функций и процедур, это намного чище.
Вы вводите код для процедур, функций и т. Д. В тело пакета вместе с объявлениями для частных переменных. Вы помещаете объявления этих процедур и функций, а также общедоступные переменные в пакет. Только последние доступны извне пакета, и для этого вам нужно префикс их имен с именем пакета и точкой.
Вы также можете определить типы данных для этого пакета: если публичные процедуры используют их в качестве входных или выходных данных, они должны быть обнародованы; если нет, то вы можете выбирать.
Пример кода, из памяти и не проверял, так что может быть ошибки в нем:
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
и т.д., чтобы использовать эти функции и переменные. Вы не можете получить доступ к внутренним функциям извне пакета. Их нужно объявлять только в начале пакета, если их вызывают выше, чем их реализация.
Пакеты имеют дополнительное преимущество перед обычными функциями и процедурами: вы можете перегружать их имена, иметь несколько разных процедур с тем же именем, но с разными типами параметров в одном пакете, и будет вызываться соответствующая функция в зависимости от того, какой параметр типы, которые вы используете. В отличие от этого, имя автономной функции или процедуры должно быть уникальным.
HTH.
По-прежнему существует хорошая практика использования пакетов вместо простого объявления функций с глобальной областью.
Если у вас есть пакеты, он может обеспечить расширяемость, если вам захочется позже добавить функции с одним и тем же контекстом, и это может сделать ваши процедуры более понятными, поскольку в нем указано, из какой библиотеки (пакета) является функция, называемая из.
- 1. Использование пакета Oracle DBMS_APPLICATION_INFO с Spring JDBC
- 2. Ошибка пакета Oracle
- 3. Характеристики и корпус пакета Oracle
- 4. Обновление пакета MyBatis для oracle
- 5. Ошибка пакета Oracle PL/SQL
- 6. Проблема установки пакета oracle NPM
- 7. Вызов пакета oracle от SSRS
- 8. Ошибка домена Oracle SOA-пакета
- 9. Ошибки создания тела пакета Oracle
- 10. В чем преимущество использования пакета в Oracle?
- 11. Использование массивов в сценариях Oracle
- 12. Использование пакета data.table внутри моего собственного пакета
- 13. Использование пакета «проверка» вызывает ошибку другого пакета
- 14. Использование пакета PEAR Horde_Text_Diff
- 15. Использование пакета Python
- 16. Использование пакета в проекте
- 17. Использование пакета R BerkeleyEarth
- 18. R: использование пакета ROI
- 19. Использование пакета анимации
- 20. Использование AIDL-пакета
- 21. Пожалуйста, объясните использование пакета
- 22. Использование пакета Newtype
- 23. Использование пакета Transformations (MST)
- 24. Использование пакета com.sun.awt
- 25. Symfony2/Композитор использование пакета
- 26. Oracle Существующее состояние пакета было отброшено
- 27. Обновление пакета oracle mybatis с использованием foreach
- 28. Oracle - просмотр тела функции из пакета
- 29. Oracle: любые замены для пакета DBMS_OUTPUT?
- 30. Объем Oracle переменных на уровне пакета
Если в пакете есть только одна процедура, вам не нужно иметь пакет. Я все еще не понимаю, какие типы процедур или функций я должен группировать в пакет. Не могли бы вы рассказать мне, какие процедуры я должен группировать в пакет? – 2008-11-18 02:06:20