Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Специальные символы, конструкция блоков⇐ ПредыдущаяСтр 19 из 19
В PL/SQL действует соглашение, что все символы приводятся к верхнему регистру поэтому объявления типа: a VARCHAR2(5); A VARCHAR2(5);
Типы специальных символов PL/SQL: 1. Арифметические операторы:
2. Операторы отношения (используются в логических выражениях):
3. Выражение и списки (используются в операторах, объявлениях типов данных, объявлениях списков параметров, ссылках на переменные и таблицы):
4. Комментарии и метки
Блоки PL/SQL, могут быть "именованными" и "не именованными". Блок PL/SQL является фундаментальной программной конструкцией. Программирование модулями позволяет разрабатывать легко читаемый код и программировать сверху вниз. Неименованный блок PL/SQL, имеет три раздела - Declaration (объявления), Body (тело) и, как правило, Exception (исключения). Стандартная конструкция неименованного блока:
DECLARE -- объявления
BEGIN -- выполняемый код
EXCEPTION -- обработка исключений
END;
/ -- символ завершения для запуска блока на компиляцию
Открытие PL/SQL редактора Для начала выбираем в меню: Пуск\Все программы\Oracle Database 10g Express Edition\Run SQL Command Line Для соединения с сервером ORACLE как администратор вводим: Conn / as sysdba 1.После чего вводим представленные команды поочередно. 2.Либо создаём текстовый файл записываем в него команды и затем в Run SQL Command Line вводим команду: start <Путь к файлу>.(Значительно проще)
Пример: start c:\1.txt и видим в окне результаты выполнения программы.
Для примера рассмотрим:"Hello World!". SET SERVEROUTPUT ONBEGINDBMS_OUTPUT.enable;DBMS_OUTPUT.put_line('Hello World!!!');END;/Получаем после компиляции: SQL> SET SERVEROUTPUT ONSQL> BEGIN 2 DBMS_OUTPUT.enable; 3 DBMS_OUTPUT.put_line('Hello World!!!'); 4 END; 5 /Hello World!!! PL/SQL procedure successfully completedБлоки, литералы, переменные Рассмотрим пару блоков PL/SQL: SET SERVEROUTPUT ON DECLARE A INTEGER;B INTEGER; BEGIN A:= 3; B:= 5; DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line(A+B); END;/В разделе DECLARE мы обьявили две переменных - A и B. Все переменные объявляются между оператором DECLARE и BEGIN. Затем в теле блока мы присвоили значениям переменных числа 3 и 5. Инициализация переменных может производиться либо при объявлении, либо в теле блока! Далее при выводе результата мы прямо в теле метода put_line объявили сумму двух переменных. Но вернее было бы провести явное преобразование типа с помощью функции TO_CHAR() вот так: DBMS_OUTPUT.enable;DBMS_OUTPUT.put_line(TO_CHAR(A+B));В первом примере мы не сделали ошибки, а произошло неявное преобразование типа В данном случае можно записать более сложное выражение для наглядности: DECLARE A INTEGER:= 3;B INTEGER;K VARCHAR2(2):= '12'; BEGIN B:= 5; DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line(TO_CHAR(TO_NUMBER(K)*A+B)); END;Хорошо виден приоритет унарных операций 12*3+5 = 41 - верно. Функция TO_NUMBER(), преобразует строковый литерал K в числовой литерал. С этими функциями преобразования мы еще не раз встретимся и их очень много и будем разбирать их последовательно, так будет проще. Так же разнообразно инициализированы переменные, что тоже не плохо, но лучше делать это одним способом, код будет более читаем. Давайте более ближе посмотрим на литералы. Например можно записать: DECLARE A VARCHAR2(1):= ' ';B VARCHAR2(128):= 'Hello World!!!';C VARCHAR2(128):= 'How ''are'' you?';D VARCHAR2(128):= 'Hello Bob - "ok"!';E VARCHAR2(128):= '12345';F VARCHAR2(128):= '01/01/1989';G VARCHAR2(128):= '!@#$%^&*()_":;<,.?';H VARCHAR2(128):= ''' '''; I NUMBER:= 12345;J NUMBER:= -12345;K NUMBER:= 12345.023745;L NUMBER:= 100.;M NUMBER:= 1.0237E2;N NUMBER:= 1.0237E-2;O NUMBER:= 0.34223;P NUMBER:=.321434; BEGIN DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line(A); DBMS_OUTPUT.put_line(B); DBMS_OUTPUT.put_line(C); DBMS_OUTPUT.put_line(D); DBMS_OUTPUT.put_line(E); DBMS_OUTPUT.put_line(F); DBMS_OUTPUT.put_line(G); DBMS_OUTPUT.put_line(H); DBMS_OUTPUT.put_line(TO_CHAR(I)); DBMS_OUTPUT.put_line(TO_CHAR(J)); DBMS_OUTPUT.put_line(TO_CHAR(K)); DBMS_OUTPUT.put_line(TO_CHAR(L)); DBMS_OUTPUT.put_line(TO_CHAR(M)); DBMS_OUTPUT.put_line(TO_CHAR(N)); DBMS_OUTPUT.put_line(TO_CHAR(O)); DBMS_OUTPUT.put_line(TO_CHAR(P)); END;/Hello World!!!How 'are' you?Hello Bob - "ok"!1234501/01/1989!@#$%^&*()_":;<,.?' '12345-1234512345,023745100102,37,010237,34223,321434 PL/SQL procedure successfully completed Итак строковые литералы могут быть типов CHAR, VARCHAR2. В строковых литералах компилятор различает регистры символов. Давайте посмотрим, что здесь и как! Строковые литералы: A VARCHAR2(1):= ' '; -- пробелB VARCHAR2(128):= 'Hello World!!!'; -- строкаC VARCHAR2(128):= 'How ''are'' you?'; -- строка с выводом символа 'D VARCHAR2(128):= 'Hello Bob - "ok"!'; -- строка с выводом символа "E VARCHAR2(128):= '12345'; -- это не число, это строкаF VARCHAR2(128):= '01/01/1989'; -- это не дата, это строка. хотя похоже!G VARCHAR2(128):= '!@#$%^&*()_":;<,.?'; -- литералы могут содержать и специальные символы!H VARCHAR2(128):= ''' '''; -- строка содержит три символа "' '" -- (одинарная кавычка, пробел одинарная кавычка)Числовые литералы:
Хорошим стилем программирования является объявление и инициализация переменных. Если инициализировать переменную, нет необходимости, то инициализацию можно опустить.
Операторы IF-THEN-ELSE Самым простым в использовании, в PL/SQL является оператор IF. Его основная логическая форма имеет вид: IF(некоторое условие справедливо) THEN-- условие справедливо, выполнять это.ELSE -- условие не выполняется-- выполнять оператор в этой части.END IF; -- конец условного оператора.
Первый блок оператора после IF-THEN называется "ПРЕДЫДУЩИМ", а блок следующий за ELSE "ПОСЛЕДУЮЩИМ". Каждый оператор IF-THEN может содержать обрамляющие блоки BEGIN - END, если в этом есть необходимость, так как при записи типа: IF(некоторое условие справедливо) THEN -- оператор 1 -- оператор 2 -- оператор 3 -- оператор 4END IF; -- конец условного оператора.Можно уверенно сказать, что все четыре оператора выполнятся наверняка. Но, если применить такую конструкцию: IF(некоторое условие справедливо) THEN BEGIN -- оператор 1 -- оператор 2 -- оператор 3 -- оператор 4 END; END IF; -- конец условного оператора.Код будет более нагляден, хотя это вопрос относится к стилю программирования. Так же считается, хорошим стилем наличие комментария при использовании оператора IF. Особенно в случае большого количества вложений. Оператор IF можно вкладывать на любую глубину выражения. Таким образом, можно задать достаточно сложную логику выражения. Так же для экономии памяти, возможно использовать конструкцию, типа: IF(некоторое условие справедливо) THEN -- проверка условия BEGIN -- условие справедливо, выполнять это... END; ELSE -- условие не выполняется DECLARE x NUMBER; BEGIN.. END; END IF; -- конец условного оператора.В этом случае переменная x будет создана, если условие предыдущего блока ложно. Хотя использовать, такие конструкции не всегда оправдано. Так же условные операторы в PL/SQL вычисляются с помощью так называемой "сокращенной" оценки. Допустим, есть такое условие: IF(a AND b) THEN -- проверка условия BEGIN.. END; END IF; -- конец условного оператора.Если выражение a равно FALSE, то дальнейшее выражение не вычисляется! Все выражения вычисляются слева направо, а выражения в скобках, имеют наивысший приоритет. Например, вот так: IF((a OR f) AND (c OR k)) THEN -- проверка условия BEGIN.. END; END IF; -- конец условного оператора.Выражения в скобках вычисляются первыми. Работа с NULL. Оператор IF работает с NULL достаточно просто и эффективно. Если записать:
Такое условие будет иметь значение FALSE и ничего выполняться не будет. Правильная запись будет такая: IF(X IS NULL) THEN -- проверка условия..END IF; -- конец условного оператора. IF(X IS NOT NULL) THEN -- проверка условия..END IF; -- конец условного оператора.А что делать, если необходимо проверить одно значение несколько раз? Например, вот так: IF(val = 1) THEN -- проверка условия..END IF; -- конец условного оператора.... IF(val = 9) THEN -- проверка условия..END IF; -- конец условного оператора.Такое количество операторов IF конечно можно использовать, но это слишком громоздко и не верно, так как существует конструкция IF - THEN - ELSIF. IF (val = 1) THEN -- проверка условия..ELSIF (val = 2) THEN..ELSIF (val = 3) THEN..ELSIF (val = 9) THEN..ELSE -- не сработало не одно из условий! END IF; -- конец условного оператора.Вот так это выглядит, достаточно просто и наглядно. Очень похоже на оператор CASE в языке Pascal. Но не совсем, хотя выполняет ту же функцию. Секция ELSE срабатывает, если не выполнилось ни одно из условий. Таким образом работает этот оператор. Как видите, на первый взгляд, все достаточно просто, хотя и реализует всю функциональность самого языка. Данный оператор является первым фундаментальным оператором языка PL/SQL. Рассмотрим еще один пример. Запускайте SQL*Plus и в любом редакторе наберите следующее: OPER VARCHAR2(5):= '&TODO'; SET SERVEROUTPUT ON DECLARE A INTEGER:= 7;B INTEGER:= 4;OPER VARCHAR2(2):= '+'; BEGIN DBMS_OUTPUT.enable; IF (OPER = '+') THEN DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'sum = '||TO_CHAR(A+B)); ELSIF (OPER = '-') THEN DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'res = '||TO_CHAR(A-B)); ELSIF (OPER = '*') THEN DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'mul = '||TO_CHAR(A*B)); ELSIF (OPER = '/') THEN DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'div = '||TO_CHAR(A/B)); END IF; END;/После запуска получаем: SQL> SET SERVEROUTPUT ONSQL> DECLARE 2 3 A INTEGER:= 7; 4 B INTEGER:= 4; 5 OPER VARCHAR2(2):= '+'; 6 7 BEGIN 8 9 DBMS_OUTPUT.enable; 10 IF (OPER = '+') THEN 11 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'sum = '||TO_CHAR(A+B)); 12 ELSIF (OPER = '-') THEN 13 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'res = '||TO_CHAR(A-B)); 14 ELSIF (OPER = '*') THEN 15 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'mul = '||TO_CHAR(A*B)); 16 ELSIF (OPER = '/') THEN 17 DBMS_OUTPUT.put_line('Operation is '||OPER||' '||'div = '||TO_CHAR(A/B)); 18 END IF; 19 20 END; 21 /Operation is + sum = 11 Процедура PL/SQL успешно завершена.3. Задание для самостоятельной работы 1. Подобный примеру “Hello, world” написать свой блок 2. Создать блок команд с использованием унарных операций, при этом использовать переменные. 3. Создать блок, используя условие IF-THEN. 4. Создать блок, используя условие IF-THEN- ELSE.
4. Контрольные вопросы 1. Что представляет собой язык PL/SQL? 2.Перечислите типы специальных символов 3. В чем преимущества использования PL/SQL вместо SQL? 4. Что такое блок? 5. Структура блока? 6. Какие типы данных вы знаете? 7. Структура условия IF-THEN-ELSE?
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-09; просмотров: 267; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.32.86 (0.014 с.) |