<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%A3%D0%91%D0%94%2F%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961%282_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80%29help</id>
		<title>СУБД/Практические занятия №1(2 семестр)help - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%A3%D0%91%D0%94%2F%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961%282_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80%29help"/>
		<link rel="alternate" type="text/html" href="http://simhard.com/wiki/index.php?title=%D0%A1%D0%A3%D0%91%D0%94/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961(2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)help&amp;action=history"/>
		<updated>2026-04-14T03:32:45Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://simhard.com/wiki/index.php?title=%D0%A1%D0%A3%D0%91%D0%94/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961(2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)help&amp;diff=3969&amp;oldid=prev</id>
		<title>Vidokq: /* Хранимые процедуры */</title>
		<link rel="alternate" type="text/html" href="http://simhard.com/wiki/index.php?title=%D0%A1%D0%A3%D0%91%D0%94/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961(2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)help&amp;diff=3969&amp;oldid=prev"/>
				<updated>2014-02-24T12:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Хранимые процедуры&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 12:46, 24 февраля 2014&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 109:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 109:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;А что произойдет, если в нашей базе данных есть несколько товаров, количество продаж которых минимально? К сожалению, в нашем случае процедура выдаст ошибку: Error Code: 1172, Result consisted of more than one row. Когда в команде SELECT выбирается сразу несколько значений поля k_price из таблицы k_protokol, невозможно присвоить эти несколько значений одной переменной p. Данную ситуацию можно обработать с помощью так называемых курсоров.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;А что произойдет, если в нашей базе данных есть несколько товаров, количество продаж которых минимально? К сожалению, в нашем случае процедура выдаст ошибку: Error Code: 1172, Result consisted of more than one row. Когда в команде SELECT выбирается сразу несколько значений поля k_price из таблицы k_protokol, невозможно присвоить эти несколько значений одной переменной p. Данную ситуацию можно обработать с помощью так называемых курсоров.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== Курсоры === &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{V|24px}}Курсор (current set of record) – это временный набор строк, которые можно перебирать последовательно, с первой до последней.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{V|24px}}Курсор (current set of record) – это временный набор строк, которые можно перебирать последовательно, с первой до последней.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Для работы с курсорами существуют следующие команды.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Для работы с курсорами существуют следующие команды.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vidokq</name></author>	</entry>

	<entry>
		<id>http://simhard.com/wiki/index.php?title=%D0%A1%D0%A3%D0%91%D0%94/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961(2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)help&amp;diff=3968&amp;oldid=prev</id>
		<title>Vidokq: Новая страница: «== Работа в '''mySQL Workbench'''  == === Хранимые процедуры === Хранимые процедуры  – это объекты базы …»</title>
		<link rel="alternate" type="text/html" href="http://simhard.com/wiki/index.php?title=%D0%A1%D0%A3%D0%91%D0%94/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%E2%84%961(2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)help&amp;diff=3968&amp;oldid=prev"/>
				<updated>2014-02-24T12:45:59Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «== Работа в &amp;#039;&amp;#039;&amp;#039;mySQL Workbench&amp;#039;&amp;#039;&amp;#039;  == === Хранимые процедуры === Хранимые процедуры  – это объекты базы …»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Работа в '''mySQL Workbench'''  ==&lt;br /&gt;
=== Хранимые процедуры ===&lt;br /&gt;
Хранимые процедуры  – это объекты базы данных, которые представляют собой программы, манипулирующие данными и выполняемые на сервере. Эти программы, кроме команд языка SQL, могут использовать немногочисленные управляющие команды.&lt;br /&gt;
Структура хранимой процедуры следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DELIMITER // &lt;br /&gt;
CREATE PROCEDURE имя_процедуры [(параметры)]&lt;br /&gt;
#Код процедуры&lt;br /&gt;
//&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объявление переменных имеет вид &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DECLARE имя_переменной тип_переменной [(длина)];&amp;lt;/source&amp;gt;&lt;br /&gt;
Блок операторов заключается в команды '''BEGIN … END'''&lt;br /&gt;
&lt;br /&gt;
Оператор присвоения выглядит так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SET переменная=значение;&amp;lt;/source&amp;gt;&lt;br /&gt;
Если нужно присвоить переменной результат команды SELECT, то используется следующий формат (многоточие означает стандартное продолжение команды):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SELECT имя_столбца INTO переменная FROM ...;&amp;lt;/source&amp;gt;&lt;br /&gt;
Условный оператор имеет вид:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;IF условие THEN&lt;br /&gt;
	Оператор1 или Группа операторов1&lt;br /&gt;
[ELSE&lt;br /&gt;
	Оператор2 или Группа операторов2]&lt;br /&gt;
END IF;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть несколько операторов цикла, самый распространенный из них:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;WHILE условие DO&lt;br /&gt;
	Оператор или Группа операторов&lt;br /&gt;
END WHILE;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выражение CASE применяется для выбора на основании нескольких опций:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CASE выражение&lt;br /&gt;
	WHEN вариант1 THEN выражение1&lt;br /&gt;
	WHEN вариант2 THEN выражение2&lt;br /&gt;
	…&lt;br /&gt;
	ELSE выражениеN&lt;br /&gt;
END CASE;&amp;lt;/source&amp;gt;&lt;br /&gt;
Для удаления процедур используется команда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DROP PROCEDURE IF EXISTS Имя_процедуры;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создадим процедуру, которая в качестве параметра получает фамилию сотрудника и печатает список всех договоров, которые он курирует. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DELIMITER // &lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE show_contracts&lt;br /&gt;
    (v_staff_name CHAR(50))&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
SELECT contract_num, contract_date, contract_type&lt;br /&gt;
   FROM k_contract c JOIN k_staff s ON          &lt;br /&gt;
         c.k_staff_staff_num=s.staff_num&lt;br /&gt;
   WHERE s.staff_name=v_staff_name;&lt;br /&gt;
&lt;br /&gt;
END//&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска этой процедуры нужно выполнить, например,  команду&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CALL show_contracts('Иванов');&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CALL show_contracts('Петров');&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создадим процедуру, которая получает номер месяца и номер года и печатает договоры за указанный период.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DELIMITER //&lt;br /&gt;
CREATE PROCEDURE find_contracts_by_month_and_year&lt;br /&gt;
    (v_month INT, v_year INT)&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
SELECT contract_num, contract_date, contract_type&lt;br /&gt;
    FROM k_contract &lt;br /&gt;
    WHERE MONTH(contract_date)=v_month AND     &lt;br /&gt;
          YEAR(contract_date)=v_year;&lt;br /&gt;
END//&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выполним процедуру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CALL find_contracts_by_month_and_year(11,2011);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создадим процедуру «Распродажа», которая находит самый непродаваемый (по количеству) товар и уценивает его на заданный процент. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DELIMITER //&lt;br /&gt;
CREATE PROCEDURE clearance (percent INT)&lt;br /&gt;
BEGIN&lt;br /&gt;
DECLARE p INT;&lt;br /&gt;
  IF percent &amp;gt; 0 AND percent &amp;lt; 100 THEN&lt;br /&gt;
		SELECT k_price_price_num INTO p FROM k_protokol &lt;br /&gt;
		   GROUP BY k_price_price_num &lt;br /&gt;
             HAVING SUM(kolvo)&amp;lt;=ALL &lt;br /&gt;
				(SELECT SUM(kolvo) FROM k_protokol&lt;br /&gt;
					GROUP BY k_price_price_num);                    &lt;br /&gt;
		UPDATE k_price &lt;br /&gt;
           SET price_sum=price_sum*(100-percent)/100 &lt;br /&gt;
             WHERE price_num=p;&lt;br /&gt;
     END IF;&lt;br /&gt;
END//&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Содержимое таблицы &amp;quot;Прайс-лист&amp;quot; до выполнения процедуры:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Для запуска этой процедуры нужно выполнить, например,  команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CALL clearance(10);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое таблицы &amp;quot;Прайс-лист&amp;quot; после выполнения процедуры:&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Как видим, товар с номером 4 в прайс-листе уценен на 10%.&lt;br /&gt;
&lt;br /&gt;
А что произойдет, если в нашей базе данных есть несколько товаров, количество продаж которых минимально? К сожалению, в нашем случае процедура выдаст ошибку: Error Code: 1172, Result consisted of more than one row. Когда в команде SELECT выбирается сразу несколько значений поля k_price из таблицы k_protokol, невозможно присвоить эти несколько значений одной переменной p. Данную ситуацию можно обработать с помощью так называемых курсоров.&lt;br /&gt;
&lt;br /&gt;
*{{V|24px}}Курсор (current set of record) – это временный набор строк, которые можно перебирать последовательно, с первой до последней.&lt;br /&gt;
Для работы с курсорами существуют следующие команды.&lt;br /&gt;
&lt;br /&gt;
Объявление курсора:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DECLARE имя_курсора CURSOR FOR SELECT текст_запроса;&amp;lt;/source&amp;gt;&lt;br /&gt;
Таким образом, любой курсор создается на основе некоторого оператора SELECT.&lt;br /&gt;
Открытие курсора:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;OPEN имя_курсора;&amp;lt;/source&amp;gt;&lt;br /&gt;
Только после открытия курсора он становится активным, и из него можно читать строки.&lt;br /&gt;
&lt;br /&gt;
Чтение значений из следующей строки курсора в набор переменных:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;FETCH имя_курсора INTO список_переменных;&amp;lt;/source&amp;gt;&lt;br /&gt;
Переменные в списке должны иметь то же количество и тип, что и столбцы курсора. &lt;br /&gt;
&lt;br /&gt;
Закрытие курсора:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CLOSE имя_курсора;&amp;lt;/source&amp;gt;&lt;br /&gt;
При переборе строк курсора возникает необходимость проверки, добрались ли мы до конца курсора или еще нет. В разных СУБД для этого могут быть предусмотрены разные средства. В СУБД MySQL назначается обработчик состояния “NOT FOUND”. Определять его нужно сразу же после описания структуры курсора:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DECLARE CONTINUE HANDLER FOR NOT FOUND оператор;&amp;lt;/source&amp;gt;&lt;br /&gt;
Например, этот обработчик может выглядеть так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь попробуем модифицировать процедуру «Распродажа» с учетом того, что у нас может быть несколько товаров с минимальным количеством продаж.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;DELIMITER //&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE clearance2 (percent INT)&lt;br /&gt;
BEGIN&lt;br /&gt;
DECLARE p INT;&lt;br /&gt;
DECLARE finished NUMERIC(1);&lt;br /&gt;
–- объявляем курсор на основе некоторого оператора SELECT&lt;br /&gt;
DECLARE my_cursor CURSOR &lt;br /&gt;
   FOR SELECT k_price_price_num FROM k_protokol &lt;br /&gt;
	    GROUP BY k_price_price_num &lt;br /&gt;
         HAVING SUM(kolvo)&amp;lt;=ALL &lt;br /&gt;
		(SELECT SUM(kolvo) FROM k_protokol&lt;br /&gt;
			GROUP BY k_price_price_num);       &lt;br /&gt;
-- объявляем обработчик состояния NOT FOUND &lt;br /&gt;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;&lt;br /&gt;
&lt;br /&gt;
IF percent &amp;gt; 0 AND percent &amp;lt; 100 THEN&lt;br /&gt;
    SET finished = 0;&lt;br /&gt;
    OPEN my_cursor;          -- открываем курсор&lt;br /&gt;
    FETCH my_cursor INTO p;  -- читаем первую строку  &lt;br /&gt;
    WHILE( finished != 1) DO&lt;br /&gt;
    	   UPDATE k_price &lt;br /&gt;
           SET price_sum=price_sum*(100-percent)/100 &lt;br /&gt;
           WHERE price_num=p;&lt;br /&gt;
        FETCH my_cursor INTO p; -- читаем очередную строку&lt;br /&gt;
    END WHILE;&lt;br /&gt;
    CLOSE my_cursor;  -- закрываем курсор&lt;br /&gt;
END IF;&lt;br /&gt;
END//&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vidokq</name></author>	</entry>

	</feed>