Иван Задворьев - Язык PL/SQL

Тут можно читать онлайн Иван Задворьев - Язык PL/SQL - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Array SelfPub.ru, год 2018. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Иван Задворьев - Язык PL/SQL краткое содержание

Язык PL/SQL - описание и краткое содержание, автор Иван Задворьев, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.

Язык PL/SQL - читать онлайн бесплатно полную версию (весь текст целиком)

Язык PL/SQL - читать книгу онлайн бесплатно, автор Иван Задворьев
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Соответствие формальных и фактических параметров

Соответствие между формальными и фактическими параметрами можно устанавливать двумя способами:

связывание по позиции (неявное связывание);

связывание по имени.

При неявном связывании фактические параметры указываются в круглых скобках после имени программы в той же последовательности, в которой были перечислены формальные параметры при создании программы.

Связывание формальных и фактических параметров по имени осуществляется с помощью конструкций вида

имя формального параметра => имя фактического параметра

С точки зрения выполнения программы нет разницы между используемыми ней способами установления соответствия между параметрами, которые обычно определяются принятым стилем программирования, корпоративными стандартами кодирования и рядом других факторов. В программах с небольшим числом формальных параметров оправдано использование соответствия параметров по позиции. В программах с большим числом формальных параметров связывание параметров по имени более информативно, более ясно показывает связь между формальными и фактическими параметрами.

SQL> CREATE PROCEDURE print(phrase IN VARCHAR2,punctuation_mark IN CHAR) IS

2 BEGIN

3 DBMS_OUTPUT.PUT_LINE(phrase||' '||punctuation_mark);

4 END;

5 /

Procedure created.

SQL> BEGIN

2 print('Hello,world','!');

3 END;

4 /

Hello,world !

PL/SQL procedure successfully completed.

SQL> BEGIN

2 print(punctuation_mark=>'!',phrase=>'Hello,world');

3 END;

4 /

Hello,world !

PL/SQL procedure successfully completed.

Если у программы в будущем появятся новые формальные параметры, то код, в котором она вызывается со связыванием параметров по имени, останется работоспособным. Если для новых параметров указаны значения по умолчанию, то они будут использованы как фактические параметры, если значения по умолчанию отсутствуют, то новые параметры получат значения NULL. А вот все вызовы со связыванием по позиции при появлении у вызываемой программы новых формальных параметров потребуется изменить так, чтобы фактических параметров снова стало столько же, сколько формальных.

Отметим, что при хорошем стиле программирования не принято объявлять процедуры и функции с большим (больше 10) числом параметров скалярных типов данных. В этом случае надо использовать небольшое число параметров составных типов данных (записи PL/SQL или коллекции).

Режимы передачи значений параметров

В PL/SQL есть три режима передачи значений параметров.

Таблица 5.Режимы передачи значений параметров в PL/SQL.

Режим

Предназначение

Использование

IN

только для чтения

переданное значение параметра может читаться, но не может быть изменено внутри процедуры или функции

OUT

для записи

для записи как в неинициализированную переменную (значению параметра внутри процедуры или функции сразу присваивается значение NULL, в дальнейшем оно может изменяться)

IN OUT

для чтения и записи

передается значение, которое можно читать и изменять внутри процедуры или функции

В большинстве случаев параметры передаются в процедуры и функции в режиме IN (именно этот режим используется по умолчанию). Режимы передачи параметров OUT и IN OUT в свою очередь позволяют, например, реализовать возвращение нескольких значений для функции.

Часто функции возвращают код завершения своей работы, который указывается как параметр команды RETURN в теле функции (например, ноль – успешное завершение, ненулевое значение – номер ошибки). По смыслу функции получить от нее помимо результата еще что-то, например, диагностическое сообщение с подробностями к коду завершения, невозможно. В команде RETURN может быть указан только один параметр. Выходом является использование формального параметра с режимом передачи OUT. В теле функции следует предусмотреть формирование и запись в этот параметр текстов сообщений, и после каждого вызова функции эти сообщения будут доступны в вызывающем коде в переменных-фактических параметрах.

Основное отличие режима передачи OUT от режима IN OUT заключается в том, что OUT-параметр становится неинициализированным при передаче внутрь процедуры или функции, то есть то значение, которое имела во внешнем блоке переменная-фактический параметр, теряется (становится равным NULL). Это верно во всех случаях, за исключением ситуации, когда внутри процедуры или функции инициируется необработанное в ней исключение. Тогда во внешнем блоке у переменной-фактического параметра для формального OUT-параметра сохранится то ее значение, которое было до передачи. У фактических параметров для формальных IN OUT-параметров значение в NULL не сбрасывается. Если значение фактического параметра внутри программы не меняли, то и после завершения вызова программы оно будет таким же, каким оно было до передачи в программу. Приведем примеры передачи значений параметров в различных режимах.

SQL> CREATE OR REPLACE PROCEDURE test(p1 IN INTEGER,

2 p2 OUT INTEGER,

3 p3 IN OUT INTEGER) IS

4 BEGIN

5 p2 := 11;

6 p3 := 12;

7 END;

8 /

Procedure created.

SQL> DECLARE

2 l_arg1 INTEGER := 5;

3 l_arg2 INTEGER := 6;

4 l_arg3 INTEGER := 7;

5 BEGIN

6 DBMS_OUTPUT.PUT_LINE('before l_arg2='||l_arg2);

7 DBMS_OUTPUT.PUT_LINE('before l_arg3='||l_arg3);

8 test(p1 => l_arg1,p2 => l_arg2,p3 => l_arg3);

9 DBMS_OUTPUT.PUT_LINE('after l_arg2='||l_arg2);

10 DBMS_OUTPUT.PUT_LINE('after l_arg3='||l_arg3);

11 END;

12 /

before l_arg2=6

before l_arg3=6

after l_arg2=11

after l_arg3=12

PL/SQL procedure successfully completed.

Видно, что значение переменной l_arg2, которое было до вызова процедуры test равным 6, внутри процедуры было изменено на 11. Значение переменной l_arg3 после вызова процедуры стало равным 12.

Изменим код процедуры test, заменив ее исполняемый блок пустой командой NULL (то есть с параметрами в коде процедуры никаких действий осуществляться не будет) и вызовем ее еще раз с такими же значениями фактических параметров:

SQL> CREATE OR REPLACE PROCEDURE test(p1 IN INTEGER,

2 p2 OUT INTEGER,

3 p3 IN OUT INTEGER) IS

4 BEGIN

5 NULL;

6 END;

7 /

Procedure created.

SQL> DECLARE

2 l_arg1 INTEGER := 5;

3 l_arg2 INTEGER := 6;

4 l_arg3 INTEGER := 7;

5 BEGIN

6 DBMS_OUTPUT.PUT_LINE('before l_arg2='||l_arg2);

7 DBMS_OUTPUT.PUT_LINE('before l_arg3='||l_arg3);

8 test(p1 => l_arg1,p2 => l_arg2,p3 => l_arg3);

9 DBMS_OUTPUT.PUT_LINE('after l_arg2='||l_arg2);

10 DBMS_OUTPUT.PUT_LINE('after l_arg3='||l_arg3);

11 END;

12 /

before l_arg2=6

before l_arg3=7

after l_arg2=

after l_arg3=7

PL/SQL procedure successfully completed.

Как и ожидалось, значение переменной l_arg2, переданной в процедуру test как OUT-параметр, стало NULL. Значение переменной l_arg3 не изменилось.

Способы передачи значений параметров

Виртуальная машина PL/SQL во время выполнения программ PL/SQL применяет два способа передачи значений параметров:

по ссылке – с соответствующим формальным параметром связывается указатель, а не фактическое значение (после этого и формальный и фактический параметры ссылаются на ячейку памяти, содержащую значение параметра);

по значению – значение фактического параметра копируется в соответствующий формальный параметр (если впоследствии программа завершается без необработанных исключений, то значение формального параметра присваивается обратно фактическому).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Иван Задворьев читать все книги автора по порядку

Иван Задворьев - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык PL/SQL отзывы


Отзывы читателей о книге Язык PL/SQL, автор: Иван Задворьев. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x