Просмотр информации о созданных хранимых процедурах



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!