Лабораторная работа №1 Ознакомление с интерфейсом субд mysql


DECLARE CONTINUE HANDLER FOR NOT FOUND



Pdf көрінісі
бет39/51
Дата11.10.2023
өлшемі1.29 Mb.
#480346
1   ...   35   36   37   38   39   40   41   42   ...   51
Metod BDiAKS 11.03.04 2017

DECLARE CONTINUE HANDLER FOR NOT FOUND 
SET b = 1; 
OPEN cur_1; 
REPEAT 
FETCH cur_1 INTO a; 
UNTIL b = 1 
END REPEAT; 
CLOSE cur_1; 
SET return_val = a; 
END;
Создание процедур и функций
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Внесение изменений
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
Удаление процедур и функций
 
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
Вызов процедур и функций 
54


CALL sp_name([parameter[,...]])
CALL sp_name[()]
Оператор
CALL
позволяет вызвать ранее определенную процедуру. 
BEGIN____Set_value_of_OUT_parameter'>Пример1
CREATE PROCEDURE p1 (OUT ver_param VARCHAR(25), INOUT incr_param INT)
BEGIN
# Set value of OUT parameter
SELECT VERSION() INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
Перед вызовом процедуры инициализируйте переменную указанные в параметрах
INOUT

После вызова процедуры значения будут установлены или изменены. 
mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+-----------------+------------+
| @version | @increment |
+-----------------+------------+
| 5.1.12-beta-log | 11 | 
Пример2
CREATE PROCEDURE `p2`(IN param1 CHAR(2) )
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from s where snum=param1;
END;
Вызов процедуры
call p2 ('S1')
Пример3
CREATE PROCEDURE `My_proc2`(IN param1 CHAR(2) )
BEGIN /* start of block */
DECLARE variable1 CHAR(10); /* variables */
IF param1 = 17 THEN /* start of IF */
SET variable1 = 'birds'; /* assignment */
ELSE
SET variable1 = 'beasts'; /* assignment */
END IF; /* end of IF */
 select variable1; /* statement */
END
Вызов процедуры
call p3 (10)
55


Триггеры
Трииœ ггер (
англ
 
 .
 trigger) — это 
хранимая процедура
 особого типа, которую пользова-
тель не вызывает непосредственно, а исполнение которой обусловлено наступлением опре-
деленного события (действием) — по сути добавлением INSERT или удалением DELETE 
строки в заданной таблице, или модификаци UPDATE данных в определенном столбце за-
данной таблицы  
реляционной базы данных
. Триггеры применяются для обеспечения це-
лостности данных и реализации сложной бизнес-логики. Триггер запускается сервером ав-
томатически при попытке изменения данных в таблице, с которой он связан. Все произво-
димые им модификации данных рассматриваются как выполняемые в  
транзакции
, в кото-
рой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обна-
ружения ошибки или нарушения целостности данных может произойти откат этой транзак-
ции. Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер 
запускается до выполнения связанного с ним события; например, до добавления записи) 
или AFTER (после события). В случае, если триггер вызывается до события, он может вне-
сти изменения в модифицируемую событием запись (конечно, при условии, что событие — 
не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые 
могут быть использованы в триггере (например, может быть запрещено вносить изменения 
в таблицу, на которой «висит» триггер, и т. п.)
Кроме того, триггеры могут быть привязаны не к таблице, а к  
представлению 
(VIEW). В этом случае с их помощью реализуется механизм «обновляемого 
представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на после-
довательность вызова триггеров, так как собственно событие (удаление, вставка или обнов-
ление) не происходит.


Достарыңызбен бөлісу:
1   ...   35   36   37   38   39   40   41   42   ...   51




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет