Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РСБДтЗ / Курс лекций РСБДиЗ.doc
Скачиваний:
135
Добавлен:
05.03.2016
Размер:
1.63 Mб
Скачать

9. Лекция: Внутренний язык субд. Сравнительные характеристики t-sql и pl/sql Введение

Практически каждая СУБД имеет в своем составе процедурное расширение языка SQL. Эти языки используются для реализации бизнес-логики и дополнительных проверок целостности на уровне сервера. Программные модули, написанные на этих языках, хранятся в СУБД и выполняются специальным компонентомнепосредственно в ядре СУБД.Синтаксис таких языков разработан для максимально простой и удобной интеграции сSQL. Модули процедурного расширения SQL могут быть одного из следующих типов

  1. Хранимые процедуры, пакеты, функции

  2. Триггеры

  3. Безымянные блоки

Oracle. Процедурное расширение -PL/SQLСинтаксис похож на ADA. Помимо СУБД, входит в другие продуктыOracle, например Oracle Developer. Является наиболее мощным изпроцедурных языков основных СУБД.

SQL Server. Процедурное расширение - Transact-SQL (T-SQL). Обладает основными возможностями. До версии 2005 отсутствовала обработка исключений.

Основные характеристики pl/sql и t-sql

  • Полный диапазон типов данных

  • Явно определяемая структура кода - блоки данных, процедуры и т.д.

  • Операторы управления потоком команд - условные, циклы и т.д.

  • Обработчики исключений

  • Повторно используемые именованные блоки кода, такие как функции, процедуры, пакеты (только в PL/SQL)

  • Тесная интеграция с SQL - непосредственный вызов команд SQL из процедурного кода

Блок PL/SQL. Структура

Вызов из sqlplus:

call dbms_output.put_line('aaa')

exec dbms_output.put_line('aaa')

Структура блока plsql

declare

i number;

d date;

begin

i := 0;

select count(*) into i from all_users;

if i > 10 then

dbms_output.put_line('> 10');

else

dbms_output.put_line('<= 10');

end if;

begin

select sysdate into d from dual;

exception

when no_data_found then

d := null;

raise;

end;

end;

Основные элементы plsql

Комментарии

/*

многострочные

комментарии

*/

Идентификаторы

declare

LongName number;

begin

longname := 10;

dbms_output.put_line(LONGNAME);

end;

declare

"LongName" number;

begin

longname := 10;

dbms_output.put_line(LONGNAME);

end;

declare

n_$# number;

begin

n_$# := 10;

end;

Логический тип

declare

b boolean;

begin

b := true;

-- error

-- dbms_output.put_line(b);

dbms_output.put_line(case b when true then 1 else 0 end);

if b then

dbms_output.put_line(1);

else

dbms_output.put_line(0);

end if;

end;

Декларации

declare

n1 number;

n2 number := 10;

n3 number default 10;

n4 number not null := 30;

begin

dbms_output.put_line(nvl(n1, -100));

dbms_output.put_line(n2);

dbms_output.put_line(n3);

dbms_output.put_line(n4);

end;

declare

n test.i%type;

r test%rowtype;

begin

n := 10;

dbms_output.put_line(n);

select * into r from test where i = 1;

dbms_output.put_line(r.i);

dbms_output.put_line(r.s);

end;

-- видимость переменных

declare

a number := 10;

b number := 20;

begin

dbms_output.put_line(a);

dbms_output.put_line(b);

declare

a number;

c number;

begin

a := 30;

c := 40;

dbms_output.put_line('---->'||a);

dbms_output.put_line('---->'||b);

dbms_output.put_line('---->'||c);

end;

dbms_output.put_line(a);

dbms_output.put_line(b);

end;

Соседние файлы в папке РСБДтЗ