Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sql.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
166.4 Кб
Скачать

Синтаксис

CREATE PROCEDURE name

[(param <datatype> [, param <datatype> …])]

[RETURNS <datatype> [, param <datatype> …])]

AS <procedure_body> [terminator]

<procedure_body> =

[<variable_declaration_list>]

<block>

<variable_declaration_list> =

DECLARE VARIABLE var <datatype>;

[DECLARE VARIABLE var <datatype>; …]

<block> =

BEGIN

<compound_statement>

[<compound_statement> …]

END

<compound_statement> = {<block> | statement;}

<datatype> = SMALLINT

| INTEGER

| FLOAT

| DOUBLE PRECISION

| {DECIMAL | NUMERIC} [(precision [, scale])]

| {DATE | TIME | TIMESTAMP)

| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}

[(int)] [CHARACTER SET charname]

| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]

name

Имя процедуры, должно быть уникальным в пределах БД

param datatype

Имя и тип параметров, которые передаются в процедуру при вызове

RETURNS param datatype

Имя и тип параметров, которые возвращаются процедурой

AS

Ключевое слово, которое разделяет заголовок и тело процедуры

DECLARE VARIABLE var datatype

Используется для объявления локальной переменной внутри процедуры. Var – имя переменной, datatype – тип переменной.

Слова DECLARE VARIABLE используются для каждой переменной

Заканчивается символом (;)

statement

Оператор на языке SQL

BEGIN…END

Определяет блок операторов.

Variable = expression

Оператор присваивания. Присваивает переменной значение.

/*Comment text*/

Комментарий

EXECUTE PROCEDURE

proc_name [var [, var …]]

[RETURNING_VALUES

var [, var …]]

Осуществляет вызов хранимой процедуры proc_name с заданными входными и выходными параметрами.

EXIT

Выход из процедуры

FOR select_statement

DO compound_statement

Для каждой строки, полученной с помощью запроса select_statement выполняется оператор или блок операторов compound_statement

compound_statement

Одиночный оператор или блок операторов, в операторных скобках BEGIN…END

IF (condition)

THEN compound_statement

[ELSE compound_statement]

Конструкция условного выполнения оператора или блока операторов.

IF (condition)

THEN compound_statement

[ELSE compound_statement]

Конструкция условного выполнения оператора или блока операторов.

Примеры

Следующая процедура SUB_TOT_BUGET берет номер отдела в качестве входного параметра и возвращает сумму бюджетов, средний, минимальный и максимальный бюджет департаментов с определенным HEAD_DEPT:

/* Compute total, average, smallest, and largest department budget.

*Parameters:

* department id

*

*Returns:

* total budget

* average budget

* min budget

* max budget

*/

SET TERM !! ;

CREATE PROCEDURE sub_tot_budget (head_dept CHAR(3))

RETURNS (tot_budget DECIMAL(12, 2), avg_budget DECIMAL(12, 2),

min_budget DECIMAL(12, 2), max_budget DECIMAL(12, 2))

AS

BEGIN

SELECT SUM(budget), AVG(budget), MIN(budget), MAX(budget)

FROM department

WHERE head_dept = :head_dept

INTO :tot_budget, :avg_budget, :min_budget, :max_budget;

EXIT;

END !!

SET TERM ; !!

Следующая процедура ORG_CHART выводит диаграмму организации:

/*Display an org-chart.

*

* Parameters:

* --

* Returns:

* parent department

* department name

* department manager

* manager's job title

* number of employees in the department

*/

CREATE PROCEDURE org_chart

RETURNS (head_dept CHAR(25), department CHAR(25),

mngr_name CHAR(20), title CHAR(5), emp_cnt INTEGER)

AS

DECLARE VARIABLE mngr_no INTEGER;

DECLARE VARIABLE dno CHAR(3);

BEGIN

FOR SELECT h.department, d.department, d.mngr_no, d.dept_no

FROM department d

LEFT OUTER JOIN department h ON d.head_dept = h.dept_no

ORDER BY d.dept_no

INTO :head_dept, :department, :mngr_no, :dno

DO

BEGIN

IF (:mngr_no IS NULL) THEN

BEGIN

mngr_name = "--TBH--";

title = "";

END

ELSE

SELECT full_name, job_code

FROM employee

WHERE emp_no = :mngr_no

INTO :mngr_name, :title;

SELECT COUNT(emp_no)

FROM employee

WHERE dept_no = :dno

INTO :emp_cnt;

SUSPEND;

END

END !!

CREATE TRIGGER

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]