Использование процедур в программе

Презентация на тему: » Процедуры и функции в Паскале. Рекурсия. Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы.» — Транскрипт:

1 Процедуры и функции в Паскале. Рекурсия

2 Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы. Для того, чтобы описывать эту последовательность один раз, а применять многократно, в языках программирования применяются подпрограммы. Подпрограмма — специальным образом оформленный блок программы, для дальнейшего его многократного использования в основной программе Использование подпрограмм позволяет реализовать один из самых современных методов программирования — структурное программирование

3 Подпрограммы решают три важные задачи, значительно облегчающие программирование: 1.избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты, т.е. сократить объём программы; 2.улучшат структуру программы, облегчая понимание при разборе; 3.уменьшают вероятность появления ошибок, повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификации.

#sql 05.Создание хранимых процедур

4 Процедуры и функции В языке Паскаль существует два вида подпрограмм: процедура (PROCEDURE ) и функция ( FUNCTION ). Процедуры и функции в Паскале объявляются в разделе описания за разделом переменных. Program ИмяПрограммы; VAR … // раздел описания переменных главной программы; procedure ИмяПроцедуры; var … begin …//Тело процедуры end; begin //тело главной программы end.

5 У функций и процедур существуют параметры (переменные, которые передают какое — либо значение). Они бывают двух видов: 1) Формальные — те, которые находятся в описании подпрограммы 2) Фактические — те, которые передаются из основной программы в функцию или процедуру. Фактические параметры должны соответствовать формальным по количеству, порядку следования и типу.

6 Также у подпрограммы существую переменные. с которыми она в дальнейшем работает. Они делятся опять же на два типа: 1) Глобальные переменные, то есть действующие во всей программе 2) Локальные — те, которые действуют только в процедуре или функции

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

8 Пример 1. Процедура без параметров, которая печатает строку из 60 звездочек. procedure pr; var i : integer ; begin for i :=1 to 60 do write ( * ‘); writeln; end; begin pr; end.

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

9 Пример 2. Составить программу обмена местами двух чисел с=5 и d=7 program obmenDan; var c,d:integer; procedure obmen ( a,b:integer); var m:integer; begin m:=a; a:=b; b:=m; writeln(a,b); end; begin writeln (‘Введите 2 числа: ‘); readln(c,d); obmen(c,d); writeln(c,’ ‘,d); end. с5 d 7 a 5 b 7 1) при вызове процедуры obmen с двумя параметрами 5 и 7, в переменные a и b помещаются тоже числа 5 и 7 соответственно: 2) далее в процедуре осуществляется перестановка значений ячеек памяти a и b: с5 d 7 a 7 b 5 3) но в переменных c и d данные не поменялись, т.к. они находятся в других ячейках памяти

10 Для того чтобы переменные c и d, a и b ссылались на одни и те же ячейки памяти (если изменятся значения a и b, то изменятся значения и c, d) необходимо при описании формальных параметров, перед нужными переменными добавить слово VAR: procedure obmen (var a,b:integer); с5 d 7 a b

11 Пример 3. Даны 3 различных массива целых чисел (размер каждого не превышает 15). В каждом массиве найти сумму элементов и среднеарифметическое значение. program proc; var i, n, sum: integer; sr : real; procedure work (r:integer; var s:integer; var s1:real); var mas : array [1..15] of integer ; j : integer; begin s:=0; for j:=1 to r do begin read (mas[j]); s:=s+mas [j]; end; s1:=s/r; end;

12 < главная программа>begin for i:=1 to 3 do begin write (‘Vvedite razmer ‘,i, ‘ masiva: ‘); readln(n); work (n, sum, sr); writeln (‘Summa elementov = ‘,sum); writeln (‘Srednearifmeticheskoe = ‘,sr:4:1); end; end.

Читайте также:
Лучшая программа для работы с файлами для Андроид

13 Результат работы программы: В программе трижды вызывается процедура work, в которой формальные переменные r, s, s1 заменяются фактическими n, sum, sr. Процедура выполняет ввод элементов массива, вычисляет сумму и среднее значение. Переменные s и s1 возвращаются в главную программу, поэтому перед их описанием ставится служебное слово var. Локальные параметры mas, j действуют только в процедуре. Глобальные — i, n, sum, sr доступны во всей программе.

14 Функции в Паскале Набор встроенных функций в языке Паскаль достаточно широк (ABS, SQR, TRUNC и т.д.). Если в программу включается новая, нестандартная функция, то ее необходимо описать в тексте программы, после чего можно обращаться к ней из программы. Обращение к функции осуществляется в правой части оператора присваивания, с указанием имени функции и фактических параметров. Функция может иметь собственные локальные константы, типы, переменные, процедуры и функции. Описание функций в Паскале аналогично описанию процедур.

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

16 Пример 4. Написать подпрограмму-функцию степени а x, где a, х – любые числа. Воспользуемся формулой: а x = e x ln a program p2; var f, b, s, t, c, d : real; < глобальные переменные>function stp (a, x : real) : real; var y : real; < локальные переменные>begin y := exp (x * ln ( a)) ; stp:= y; end; < описание функции закончено >begin d:= stp (2.4, 5); writeln (d, stp (5,3.5)); read (f, b, s, t); c := stp (f, s)+stp (b, t); writeln (c); end.

17 Функции Подпрограмма часть программы, оформленная в виде отдельной синтаксической конструкции и снабжённая именем (самостоятельный программный блок), для решения отдельных задач. Описание процедуры: procedure ( ) Begin End; Описание функции: function ( ): тип; Begin := ; End; Вызов процедуры: ( ); Вызов функции: := ( ); 1. В правой части оператора присваивания. 2. В выражении, стоящем в условии оператора разветвления. 3. В процедуре вывода, как результат работы функции. Описание подпрограмм Процедуры

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

19 Пример 5. Составить рекурсивную функцию, вычисляющую факториал числа n следующим образом: n! = 1, если n= 1 n!= ( n -1 )! · n, если n > 1 function f ( n : integer): integer; begin if n = 1 then f := 1 else f := n * f ( n -1 ); end;

20 Задачи 1)Найти площадь круга с использованием процедуры ифункции. 2)Найти НОД и НОК 3) Найти 1!+2!+…+n! 4) упорядочить значения трёх переменных a, b и c в порядке их убывания

Источник: www.myshared.ru

Хранимые процедуры PL/SQL: создание, выполнение, вывод, удаление и сокрытие кода

Хранимые процедуры PL/SQL: основы программирования

В этой заметке моего блога мы поговорим о создании, выполнении, удалении и других операциях с программами (процедурами) PL/SQL, выполняемыми с помощью SQL*Plus.

  • Создание хранимой процедуры PL/SQL
  • Выполнение хранимой процедуры PL/SQL
  • Вывод хранимых процедур PL/SQL
  • Управление привилегиями и создание синонимов хранимых процедур
  • Удаление хранимой программы (процедуры) PL/SQL
  • Сокрытие исходного кода хранимой программы (процедуры) PL/SQL
  • Вас заинтересует / Intresting for you:

Создание хранимой процедуры PL/SQL

Для того чтобы написать собственную программу на PL/SQL, нужно воспользоваться одной из инструкций SQL CREATE . Например, если вы хотите создать хранимую функцию именем wordcount для подсчета количества слов в строке, выполните инструкцию CREATE FUNCTION ::

CREATE FUNCTION wordcount (str IN VARCHAR2) RETURN PLS_INTEGER AS . здесь объявляются локальные переменные BEGIN . здесь реализуется алгоритм END; /

Как и в случае с простыми блоками BEGIN-END, приводившимися ранее, код этой инструкции в SQL*Plus должен завершаться символом косой черты, который размещается в отдельной строке.

Если администратор базы данных предоставил вам привилегию создания процедур CREATE PROCEDURE (которая также включает привилегию создания функций), эта инструкция заставит Oracle откомпилировать и сохранить в схеме заданную хранимую функцию. И если код будет откомпилирован успешно, вы увидите следующее сообщение:

Function created.

Если в схеме Oracle уже имеется объект (таблица или пакет) с именем wordcount , выполнение инструкции CREATE FUNCTION завершится сообщением об ошибке:

ORA-00955: name is already used by an existing object.

По этой причине Oracle поддерживает инструкцию CREATE OR REPLACE FUNCTION — вероятно, вы будете использовать ее в 99 случаях из 100:

Читайте также:
Что такое файл программы с расширением exe

CREATE OR REPLACE FUNCTION wordcount (str IN VARCHAR2) RETURN PLS_INTEGER AS — то же, что в приведенном выше примере

Связка OR REPLACE позволяет избежать побочных эффектов, вызванных удалением и повторным созданием программ; она сохраняет все привилегии на объект, предоставленные другим пользователям или ролям. При этом она заменяет только объекты одного типа и не станет автоматически удалять таблицу с именем wordcount только потому, что вы решили создать функцию с таким же именем.

Как упоминалось ранее, SQL*Plus по умолчанию не выводит содержимое сценария на экран. Для того чтобы исходный код сценария, включая присвоенные Oracle номера строк, отображался на экране, воспользуемся командой SET ECHO ON . Особенно полезна эта команда в ходе диагностики. Давайте намеренно допустим в программе ошибку, закомментировав объявление переменной:

Предупреждение сообщает нам о том, что функция была создана, но из-за ошибок компиляции ее выполнение невозможно. Нам удалось сохранить исходный код в базе данных; теперь нужно извлечь подробную информацию об ошибке из базы данных. Проще всего это сделать с помощью команды SQL*Plus SHOW ERRORS, которую можно сократить до SHO ERR :

SQL> SHO ERR Errors for FUNCTION WORDCOUNT: LINE/COL ERROR ——— ———————————————- 14/13 PLS-00201: identifier ‘WORDS’ must be declared 14/13 PL/SQL: Statement ignored 21/4 PL/SQL: Statement ignored 21/11 PLS-00201: identifier ‘WORDS’ must be declared

Вывод других ошибок

Многие программисты Oracle знают только одну форму команды SQL*Plus:

SQL> SHOW ERRORS

Они ошибочно полагают, что для получения дополнительной информации об ошибках, не встречавшихся при последней компиляции, необходимо обращаться с запросом к представлению USER_ERRORS . Однако если указать в команде SHOW ERRORS категорию и имя объекта, вы получите информацию о последних связанных с ним ошибках:

SQL> SHOW ERRORS категория [схема.]объект

Например, чтобы просмотреть информацию о последних ошибках в процедуре wordcount , выполните такую команду:

SQL> SHOW ERRORS FUNCTION wordcount

Будьте внимательны при интерпретации выходного сообщения:

No errors.

Оно выводится в трех случаях: (1) когда код объекта откомпилирован успешно; (2) вы задали неверную категорию (скажем, функцию вместо процедуры); и (3) объект с заданным именем не существует.

Полный список категорий, поддерживаемых этой командой, зависит от версии СУБД, но в него как минимум входят следующие категории:

DIMENSION FUNCTION JAVA SOURCE JAVA CLASS PACKAGE PACKAGE BODY PROCEDURE TRIGGER TYPE TYPE BODY VIEW

Компилятор обнаружил оба вхождения переменной и сообщил точные номера строк и столбцов. Более подробную информацию об ошибке можно найти по идентификатору (в данном случае PLS-00201) в документации Oracle Database Error Messages.

Во внутренней реализации команда SHOW ERRORS обращается с запросом к представлению Oracle USER_ERRORS из словаря данных. В принципе вы можете обращаться к этому представлению и самостоятельно, но обычно это просто не нужно (см. врезку «Вывод других ошибок»).

Команда SHOW ERRORS часто добавляется послед каждой инструкции CREATE , создающей хранимую программу PL/SQL. Поэтому типичный шаблон для построения хранимых процедур в SQL*Plus может начинаться так:

CREATE OR REPLACE тип_программы AS . ваш код END; / SHOW ERRORS

(Обычно я не включаю команду SET ECHO ON в сценарий, а просто ввожу ее в командной строке, когда это потребуется.)

Если ваша программа содержит ошибку, которая может быть обнаружена компилятором, инструкция CREATE сохранит эту программу в базе данных, но в нерабочем состоянии. Если же вы неверно используете синтаксис CREATE , то Oracle не поймет, что вы пытаетесь сделать, и не сохранит код в базе данных.

Выполнение хранимой процедуры PL/SQL

Особенности процедур — преимущества и трудности при работе с ними

→ Процедуры хранятся в скомпилированном виде, а значит, СУБД не тратит время на компиляцию запроса при каждом его исполнении.
→ Команда для вызова хранимой процедуры значительно короче, чем запрос, содержащийся в коде приложения, поэтому требуется меньше времени и трафика на передачу операторов на сервер БД.
→ Быстродействие хранимых процедур обусловлено еще и тем, что после вызова они загружаются в память и выгружаются из нее с учетом алгоритма вытеснения по давности использования. В Oracle размер памяти для КЭШа хранимых процедур оказывается в файле Init.Ora.
→ С помощью автоматической или ручной перекомпиляции изменяют плана выполнения из-за изменения индексов и т.п. В СУБД SQL Server при создании процедуры предусмотрена опция WITH RECOMPILE, используемая как при создании, так и при вызове процедур.

Читайте также:
Формат файлов для просмотра которых предназначена программа adobe reader ответ

2) Большая степень свободы

→ Хранимые процедуры поддерживают: входные и выходные параметры, локальные переменные, операторы условного ветвления, циклы, вызовы встроенных операторов ид других процедур, исполнение DDL-операторов.
→ Во многом хранимые процедуры похожи на процедуры языков программирования высокого уровня.
→ Хранимые процедуры могут быть вложенными. Так SQL Server допускает до 32 уровней вложения.

3) Упрощение кода приложения клиента

→ В приложении нет SQL-запросов, а значит, программисту не нужно писать код для их генерации.
→ Для вызова хранимой процедуры необходимо знать только имя и список параметров (аналогично вызову обычных функций/методов в теле приложения).
→ Такой подход сокращает размер кода и улучшает его читабельность, что положительно влияет на качество конечного продукта.

4) Безопасность

→ Использование хранимых процедур позволяет значительно снизить угрозу возникновения уязвимости типа SQL-injection (один из распространенных способов взлома сайтов и программ, работающих с БД, основанный на внедрении в запрос произвольного SQL-кода).
→ Кроме того, можно устанавливать права доступа к объектам БД для каждой хранимой процедуры, что также способствует повышению уровня безопасности приложения.

5) Защита приложения от изменений структуры БД

→ В процессе развития проекта может возникнуть необходимость в изменении структуры БД, например, добавить | удалить | переименовать таблицу или столбец.
→ Если приложение генерирует SQL-запросы, то необходимо внести изменения во все фрагменты кода, отвечающие за генерацию запросов.
→ Организация доступа через хранимые процедуры не требует внесения изменений в код приложения до тех пор, пока имя хранимой процедуры и список параметров (а также ожидаемый результат) остаются прежними

6) Снижение числа ошибок и упрощение отладки

Чаще всего ошибки в работе приложения с БД возникают по следующим причинам:
→ Приложение использует некорректные значения для генерации SQL-запроса.
→ SQL-выражение некорректно описывает ожидаемый результат (т.е. ошибка в запросе).
→ Фрагмент кода приложения, отвечающий за генерацию SQL-запроса, содержит ошибку и не способен правильно построить нужный запрос.

Трудности работы с процедурами

1) Проблемы совместимости
Если необходимо обеспечить легкую переносимость приложения на максимальное количество СУБД, то, вероятно, стоит отдать предпочтение динамической генерации запросов, так как хранимые процедуры поддерживаются не всеми СУБД.

2) Сложность внедрения в существующий проект
Внедрение хранимых процедур в приложение, использующее динамическую генерацию запросов, приведет к полной реорганизации кода работы БД. Необходимость такой реорганизации не всегда просто объяснить заказчику.

3) Передача сложных типов данных
Иногда в качестве аргумента процедуре требуется передать не просто строку или число, а массив данных (или более сложную структуру). В этом случае данные необходимо преобразовать в строку и в таком виде передавать хранимой процедуре, внутри которой происходит обратное преобразование. Построение запроса в теле приложения в этом случае проще.

Особенности использования процедур

• Хранимые процедуры служат только для доступа к данным (извлечение/ обновление/удаление) и ни для чего больше. Использование процедур в иных целях (проверка данных или генерация HTML) является ошибкой.

• Достаточно сложно передать в хранимую процедуру массив значений. Наиболее популярным решением является передача массива в хранимую процедуру в виде строки, содержащей элементы массива, разделенные специальным символом (вертикальная черта “|”), далее параметр анализируется в теле хранимой процедуры.

• Процедура может вернуть более одного результат. В коде вызова хранимой процедуры необходимо делать итерацию по всем возвращаемым результатам и обрабатывать каждый из них в отдельности.

• Если в теле хранимой процедуры необходимо динамически генерировать SQL-запрос (лучше всеми возможными способами избегать написания подобных процедур), не забывайте экранировать кавычки и спецсимволы во всех переданных в процедуру параметрах, участвующих в построении запроса. Иначе процедура будет содержать потенциальную уязвимость типа SQL-injection.

  1. Особенности промышленных серверов при работе с процедурами SQL
  2. Работа с процедурами SQL в Delphi
  3. Хранимые процедуры в SQL
  4. Особенности работы в режиме SQL Server.
  5. Особенности работы СУБД в WEB
  6. Оптимизация в базах данных
  7. Обработка исключений при работе с базами данных
  8. Особенности задач поиска и оптимизации проектных решений
  9. ASP (Active Server Pages) — общие сведения и особенности
  10. Методы-функции и методы-процедуры — синтаксис объявления, реализация методов и варианты вызова методов
  11. Функции и процедуры, пакеты в VHDL
  12. IDC (Internet Database Connector) — общие сведения и особенности
  13. Методика создания клиента в Delphi
  14. Объявление пакета в SQL, понятие уровней строгости
  15. Множества и операции над ними
  16. Программы dbForge Studio for MySQL
  17. Описание целочисленных, вещественных, логических данных и операции над ними в Pascal

Источник: all4study.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru