<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум PHP-MyAdmin.RU &mdash; Хранимые процедуры]]></title>
		<link>https://forum.php-myadmin.ru/viewtopic.php?id=327</link>
		<atom:link href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=327&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Хранимые процедуры».]]></description>
		<lastBuildDate>Tue, 13 Feb 2007 15:24:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1965#p1965</link>
			<description><![CDATA[<p><strong>anlide</strong><br />Пожалуйста, рад был помочь.<br />В свою очередь благодарю вас за ценные дополнения.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Tue, 13 Feb 2007 15:24:02 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1965#p1965</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1959#p1959</link>
			<description><![CDATA[<p>Спасибо большое, вы ответили на мои вопросы <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> .</p><p>Хочу также заметить, что хранимая процедура создаётся в текущей выбранной БД. То есть если была команда &quot;use myDB&quot; то после этого можно не указывать (default).<br />На тему delimiter в mysql - вы всё правильно описали. Но тем-не-менее из php скрипта новость добавляется посредством команды CALL. Даже несмотря, что у меня были грубые нарушения в синтаксисе... видимо на самом деле mysql смотрит комбинацию символов после слова delimiter до ближайшего пробела или конца строки.<br />В phpmyadmin теперь тоже скрипт запускается <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> большое вам спасибо <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Ещё стоит упамянуть о такой детальке. У меня в скрипте не хотела выполнятся эта процедура. Проблема была в том, что в phpmyadmin пользователь имеет полные права. А в скрипте очень ограниченные (я специально обрезал доступ). В результате выяснилось, что надо было поставить право на команду EXECUTE...</p>]]></description>
			<author><![CDATA[null@example.com (anlide)]]></author>
			<pubDate>Tue, 13 Feb 2007 07:20:06 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1959#p1959</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1950#p1950</link>
			<description><![CDATA[<p><strong>anlide</strong><br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS db_name.addnews;
DELIMITER //
CREATE PROCEDURE db_name.addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;//
DELIMITER ;</code></pre></div><p>Этот вариант ближе к тому, что предлагает документация MySQL, которую вам стоило почитать, плюс определяет БД хранимой процедуры, если она отличается от изначальной (default). db_name - имя БД для хранения и вызова процедуры. Обратите внимание на существенные различия:<br />1) delimiter определяется подстановкой символов, то есть у вас delimiter получается не &quot;;;&quot;, а &quot;;; ;&quot;.<br />2) Конец запроса, тоже не корректен &quot;END;;&quot;, здесь должно быть &quot;END;&quot;.<br />3) Возврат символа разделителя &quot;;&quot; должен выглядеть так &quot;DELIMITER ;&quot;.</p><p>Теперь по поводу phpMyAdmin. Во вкладке SQL, как я уже говорил, есть поле delimiter, в которое надо вставить символ разделитель, в предлагаемом мной примере это &quot;//&quot;, естественно из запросв строку определяющую разделитель надо убрать и оставить только сам запрос<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS db_name.addnews//
CREATE PROCEDURE db_name.addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;//</code></pre></div><p>Обратите внимание, что оба запроса должны быть отделены установленым разделителем в виде &quot;//&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Mon, 12 Feb 2007 11:22:14 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1950#p1950</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1945#p1945</link>
			<description><![CDATA[<p>Вот код, который работает через консольку mysql.<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS addnews;
DELIMITER ;; ;
CREATE PROCEDURE addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;;
DELIMITER ; ;;</code></pre></div><p>Если где угодно вызвать &quot;CALL addnews (1,&#039;test&#039;,&#039;test body&#039;);&quot; - то соответственно процедура будет выполнена. Дело в том, что внутри операторных скобок &quot;begin...end&quot; должны стоять команды отделённые &quot;;&quot;. НО!!! mysql распознаёт эту &quot;;&quot; как конец ПРОЦЕДУРЫ. Соответственно вылетает с синтаксической ошибкой. В инете я насмотрел многие сталкиваются с этой проблемой - решение использование DELIMITER. Который заменяет ключевой символ конца команды на любой другой. Символ &quot;;&quot; теперь свободен и может быть использован по назначению внутри процедуры.</p><p>Далее - phpmyadmin непонимает команду DELIMITER. Со страшнючими матами вылетает с ошибкой. Выполнение всего запроса соответственно невозможно.</p><p>С правами доступа я буду разбиратся позже... ща главное чтоб хоть как-то работало...</p><p>Спасибо, попробую новый phpmyadmin...</p>]]></description>
			<author><![CDATA[null@example.com (anlide)]]></author>
			<pubDate>Sun, 11 Feb 2007 22:50:02 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1945#p1945</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1941#p1941</link>
			<description><![CDATA[<p><strong>anlide</strong><br />Да дело то не только в том, где хранить процедуры, но и в том как их вызывать.<br />db_name.sp_name</p><p>Надо также понимать, что некоторые процедуры может выполнять только root или пользователь наделенный grant привилегиями, так как иногда требуется доступ к БД mysql.</p><p>Как это - &quot;phpMyAdmin не понимает delimiter&quot; - а на кой лях поле delimiter во вкладке SQL?</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 11 Feb 2007 15:56:09 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1941#p1941</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1940#p1940</link>
			<description><![CDATA[<p><strong>anlide</strong><br />Попробуй 2.9.2 - Это последняя стабильная версия, в ней как раз улучшена работа с хранимыми процедурами и др. &quot;вкусностями&quot; MySQL 5<br /><a href="http://php-myadmin.ru/release/2.9.2.html">Аннотация phpMyAdmin 2.9.2</a><br /><a href="http://php-myadmin.ru/download/index.html#pma2.9.2">Скачать phpMyAdmin 2.9.2</a></p>]]></description>
			<author><![CDATA[null@example.com (Lokki)]]></author>
			<pubDate>Sun, 11 Feb 2007 15:47:33 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1940#p1940</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1939#p1939</link>
			<description><![CDATA[<div class="quotebox"><cite>Lokki сказал:</cite><blockquote><p><strong>anlide</strong><br />Версия phpMyAdmin какая установлена?</p></blockquote></div><p>phpMyAdmin - 2.9.0.3</p>]]></description>
			<author><![CDATA[null@example.com (anlide)]]></author>
			<pubDate>Sun, 11 Feb 2007 15:38:31 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1939#p1939</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1938#p1938</link>
			<description><![CDATA[<p><strong>anlide</strong><br />Версия phpMyAdmin какая установлена?</p>]]></description>
			<author><![CDATA[null@example.com (Lokki)]]></author>
			<pubDate>Sun, 11 Feb 2007 15:19:32 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1938#p1938</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1937#p1937</link>
			<description><![CDATA[<p>Да, через командную строку работает. И создаётся в базе &quot;mysql&quot;, как сделать так, чтоб оно в моей базе сохранялась?<br />Проблема в том, что phpmyamdin не понимает команды &quot;delimiter&quot; вот и всё...</p>]]></description>
			<author><![CDATA[null@example.com (anlide)]]></author>
			<pubDate>Sun, 11 Feb 2007 14:47:20 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1937#p1937</guid>
		</item>
		<item>
			<title><![CDATA[Re: Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1935#p1935</link>
			<description><![CDATA[<p>Не забывайте писать версии используемых программ, в частности сервера MySQL и используемого скрипта phpMyAdmin.</p><p>Запрос выполняется через phpMyAdmin? Пробовали через командную строку?</p><p>Запрос без использования процедуры выполняется нормально?<br />INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;</p><p>Вообще-то тонкостей использования процедур и функций очень много, я все равно не смогу перекопировать сюда весь справочный материал из руководства MySQL. Например, если не указывать БД для которой сохраняется процедура, то она будет сохраняться для изначальной (default) БД.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 11 Feb 2007 11:33:38 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1935#p1935</guid>
		</item>
		<item>
			<title><![CDATA[Хранимые процедуры]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=1933#p1933</link>
			<description><![CDATA[<p>Подскажите plz что я неправильно делаю:<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS addnews;
CREATE PROCEDURE addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;</code></pre></div><p>При этом есть таблица `news`:<br /></p><div class="codebox"><pre><code>CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `time_in` datetime NOT NULL,
  `id_user` int(11) NOT NULL,
  `title` varchar(128) NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `time_in` (`time_in`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;</code></pre></div><p>Возвращает следующее:<br /></p><div class="codebox"><pre><code>#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, &#039; at line 3</code></pre></div><p>Заранее большое спасибо...</p>]]></description>
			<author><![CDATA[null@example.com (anlide)]]></author>
			<pubDate>Sun, 11 Feb 2007 07:30:46 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=1933#p1933</guid>
		</item>
	</channel>
</rss>
