Просмотр информации о созданных хранимых процедурах
SHOW PROCEDURE STATUS – возвращает список хранимых процедур, с некоторыми данными о них.
SHOW CREATE PROCEDURE – возвращает код конкретной процедуры.
Разделители и процедуры содержащие несколько операторов
Хранимые процедуры не очень полезные, если они содержат одну инструкцию. Как отличить инструкцию внутри процедуры от конца этой процедуры? Можно создать другой разделитель инструкции для конца оператора CREATE PROCEDURE.
Пример:
DELIMITER |
Обратите внимание на то, что нет точки с запятой после символа «|», которую мы будем использовать в процедуре. Вы должны выбирать разделитель, который не будет использоваться в вашей процедуре, и он может быть больше чем один символ.
Пример:
create table sp_inst(id int primary key auto_increment,
Length_str int, txt varchar(10));
delimiter |
create procedure sp_ins(p varchar(10))
Begin
set @x = char_length(p);
insert into sp_ins(Length_str, txt) values (@x, p);
end|
delimiter ;
call sp_ins("test332");
call sp_ins("test");
select * from sp_ins;
Когда вызвали процедуру, MySQL все еще использовала в качестве разделителя «|», но не точку с запятой, по этому операторы не запускались после точки с запятой.
Переменные процедуры
В хранимых процедурах также можно определить локальные переменные оператором DECLARE.
DELIMITER |
CREATE PROCEDURE sp_declare (P INT)
BEGIN
DECLARE x INT;
DECLARE y INT DEFAULT 10;
SET x = P*y;
select x;
END|
DELIMITER ;
Заполнение переменных из существующих таблиц
DELIMITER |
CREATE PROCEDURE sp_select ()
BEGIN
DECLARE x INT;
DECLARE y VARCHAR(10);
SELECT id,txt INTO x,y FROM sp_ins LIMIT 1;
|
|
SELECT x,y;
END|
Query OK, 0 rows affected (0.00 sec)
DELIMITER ;
CALL sp_select()\G
Задание 1. Создать хранимые процедуры.
CREATE PROCEDURE GiveStudents
AS BEGIN
SELECT Student.NumberZachet, Student.FirstName, Student.LastName, Student.BirthDate, Student.Sex, [Group].GroupName, [Group].StudyYears
FROM [Group] INNER JOIN Student ON [Group].GroupName = Student.GroupName
ORDER BY GroupName COMPUTE COUNT(NumberZachet) BY GroupName
END
GO
Задание 2. Создадим процедуру GiveStudentsSingle, принимающую один входной параметр Nomer (номер группы). Эта процедура будет выводить список студентов определенной группы.
CREATE PROCEDURE GiveStudentsSingle
@Nomer decimal(6, 0)
AS
BEGIN
SELECT Student.NumberZachet, Student.FirstName, Student.LastName, Student.BirthDate, Student.Sex, [Group].GroupName, [Group].StudyYears FROM [Group] INNER JOIN Student ON [Group].GroupName = Student.GroupName
WHERE [Group].GroupName = @Nomer COMPUTE COUNT(NumberZachet)
END
GO
Задание 3. В результате выполнения процедуры GiveMeStudent и ввода значений параметров Nomer, Name и LName, будет выведена информация по запрошенному студенту.
CREATE PROCEDURE GiveMeStudent
@Nomer decimal(6, 0), @Name nvarchar(50), @LName nvarchar(50)
AS
BEGIN
SELECT Student.NumberZachet, Student.FirstName, Student.LastName, Student.BirthDate, Student.Sex, [Group].GroupName, [Group].StudyYears
FROM [Group] INNER JOIN Student ON [Group].GroupName = Student.GroupName
WHERE [Group].GroupName = @Nomer AND FirstName LIKE @Name AND LastName LIKE @LName COMPUTE COUNT(NumberZachet)
END
GO
Дата добавления: 2019-11-16; просмотров: 135; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!