<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Коментари на: Логически оператори и цикли</title>
	<atom:link href="http://www.cphpvb.net/db/1509-%d0%bb%d0%be%d0%b3%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b8-%d0%b8-%d1%86%d0%b8%d0%ba%d0%bb%d0%b8/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cphpvb.net/db/1509-%d0%bb%d0%be%d0%b3%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b8-%d0%b8-%d1%86%d0%b8%d0%ba%d0%bb%d0%b8/</link>
	<description>дневникът на Филип Петров</description>
	<lastBuildDate>Tue, 07 Feb 2012 14:50:41 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>От: Тодор</title>
		<link>http://www.cphpvb.net/db/1509-%d0%bb%d0%be%d0%b3%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b8-%d0%b8-%d1%86%d0%b8%d0%ba%d0%bb%d0%b8/#comment-6985</link>
		<dc:creator>Тодор</dc:creator>
		<pubDate>Wed, 12 May 2010 13:14:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.cphpvb.net/?p=1509#comment-6985</guid>
		<description>Ясно. Мерси :)</description>
		<content:encoded><![CDATA[<p>Ясно. Мерси :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Филип Петров</title>
		<link>http://www.cphpvb.net/db/1509-%d0%bb%d0%be%d0%b3%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b8-%d0%b8-%d1%86%d0%b8%d0%ba%d0%bb%d0%b8/#comment-6980</link>
		<dc:creator>Филип Петров</dc:creator>
		<pubDate>Wed, 12 May 2010 06:18:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.cphpvb.net/?p=1509#comment-6980</guid>
		<description>1) Да, разбира се. Ето например как може да стане с използването на временна таблица (temporary table):

&lt;pre&gt;DELIMITER &#124;

CREATE PROCEDURE check_clients(IN x INT, IN y INT)
BEGIN
	DECLARE iterator INT;
	SET iterator = x;

	CREATE TEMPORARY TABLE result_table (
		id INT(11),
		amount decimal(9,2)
	);

	WHILE (iterator &gt;= x AND iterator &lt;= y)
        DO
		INSERT INTO result_table(id, amount)
		SELECT id, amount FROM accounts WHERE id = iterator;

                SET iterator = iterator + 1;
	END WHILE;

	SELECT * FROM result_table;
	DROP TABLE result_table;
END
&#124;

DELIMITER ;&lt;/pre&gt;

2) Не, не можеш да изпълняваш заявка върху resultset от съхранена процедура. Вместо това можеш да накараш процедурата да съхранява информацията във временна таблица, вместо да връща resultset. Така след изпълнението на процедурата можеш да изпълниш заявката върху тази временна таблица и накрая да я изтриеш.</description>
		<content:encoded><![CDATA[<p>1) Да, разбира се. Ето например как може да стане с използването на временна таблица (temporary table):</p>
<pre>DELIMITER |

CREATE PROCEDURE check_clients(IN x INT, IN y INT)
BEGIN
	DECLARE iterator INT;
	SET iterator = x;

	CREATE TEMPORARY TABLE result_table (
		id INT(11),
		amount decimal(9,2)
	);

	WHILE (iterator &gt;= x AND iterator < = y)
        DO
		INSERT INTO result_table(id, amount)
		SELECT id, amount FROM accounts WHERE id = iterator;

                SET iterator = iterator + 1;
	END WHILE;

	SELECT * FROM result_table;
	DROP TABLE result_table;
END
|

DELIMITER ;</pre>
<p>2) Не, не можеш да изпълняваш заявка върху resultset от съхранена процедура. Вместо това можеш да накараш процедурата да съхранява информацията във временна таблица, вместо да връща resultset. Така след изпълнението на процедурата можеш да изпълниш заявката върху тази временна таблица и накрая да я изтриеш.</pre>
]]></content:encoded>
	</item>
	<item>
		<title>От: Тодор</title>
		<link>http://www.cphpvb.net/db/1509-%d0%bb%d0%be%d0%b3%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b8-%d0%b8-%d1%86%d0%b8%d0%ba%d0%bb%d0%b8/#comment-6977</link>
		<dc:creator>Тодор</dc:creator>
		<pubDate>Tue, 11 May 2010 20:13:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.cphpvb.net/?p=1509#comment-6977</guid>
		<description>При написаната по-горе процедура check_clients:


mysql&gt; CALL check_clients(5,6);

+----+--------+
&#124; id &#124; amount &#124;
+----+--------+
&#124;  5 &#124; 191.98 &#124;
+----+--------+
1 row in set (0.00 sec)

+----+---------+
&#124; id &#124; amount  &#124;
+----+---------+
&#124;  6 &#124; 1220.00 &#124;
+----+---------+
1 row in set (0.00 sec)

Процедурата връща 2 &quot;сет&quot;-а с по 1 резултат;
Въпроси:
1) Възможно ли е в MySql да се върнат 2-та резултата като 1 сет? Например:
+----+--------+
&#124; id &#124; amount &#124;
+----+--------+
&#124;  5 &#124; 191.98 &#124;
+----+--------+
&#124;  6 &#124; 1220.0 &#124;
+----+--------+

2) Възможно ли е по някакъв начин да се извика процедурата и в същото време да се направи нещо по колекцията, която е върнала?
Например:

 select * 
 from check_clients(5,6) 
 where (some condition)</description>
		<content:encoded><![CDATA[<p>При написаната по-горе процедура check_clients:</p>
<p>mysql&gt; CALL check_clients(5,6);</p>
<p>+&#8212;-+&#8212;&#8212;&#8211;+<br />
| id | amount |<br />
+&#8212;-+&#8212;&#8212;&#8211;+<br />
|  5 | 191.98 |<br />
+&#8212;-+&#8212;&#8212;&#8211;+<br />
1 row in set (0.00 sec)</p>
<p>+&#8212;-+&#8212;&#8212;&#8212;+<br />
| id | amount  |<br />
+&#8212;-+&#8212;&#8212;&#8212;+<br />
|  6 | 1220.00 |<br />
+&#8212;-+&#8212;&#8212;&#8212;+<br />
1 row in set (0.00 sec)</p>
<p>Процедурата връща 2 &#8222;сет&#8220;-а с по 1 резултат;<br />
Въпроси:<br />
1) Възможно ли е в MySql да се върнат 2-та резултата като 1 сет? Например:<br />
+&#8212;-+&#8212;&#8212;&#8211;+<br />
| id | amount |<br />
+&#8212;-+&#8212;&#8212;&#8211;+<br />
|  5 | 191.98 |<br />
+&#8212;-+&#8212;&#8212;&#8211;+<br />
|  6 | 1220.0 |<br />
+&#8212;-+&#8212;&#8212;&#8211;+</p>
<p>2) Възможно ли е по някакъв начин да се извика процедурата и в същото време да се направи нещо по колекцията, която е върнала?<br />
Например:</p>
<p> select *<br />
 from check_clients(5,6)<br />
 where (some condition)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

