Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Такая хранимая процедура будет работать?


Автор: vlad275 8.10.2009, 12:18
Код

DELIMITER $$

DROP PROCEDURE IF EXISTS `p4` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`(OUT intID, OUT varcharStatus, OUT varcharName)
BEGIN

DECLARE intID INT;
DECLARE varcharStatus, varcharName VARCHAR;
SELECT * INTO intID, varcharStatus, varcharName FROM `tCandidates`;
RETURN intID, varcharStatus, varcharName;
END

DELIMITER ;



Код

mysql_query('CALL p4()');
$res=mysql_query('SELECT @a');

Автор: youri 8.10.2009, 12:24
а почему бы не попробовать перед тем как на форум постить? ;)

Автор: vlad275 8.10.2009, 12:31
Я пробовал. Она не сохраняется. Не могу найти ошибку

Цитата

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 ' OUT varcharStatus, OUT varcharName)
BEGIN
  DECLARE intID INT;
  DECLARE var' at line 1

Автор: youri 8.10.2009, 12:38
так так и надо было вопрос задать. А теперь смотрим http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html

Автор: vlad275 8.10.2009, 13:03
Смотрю синтаксис. Слишком много букв.
А в чем ошибка то?

Добавлено @ 13:05
Код

DELIMITER $$

DROP PROCEDURE IF EXISTS `p4` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`(OUT intID INT, OUT varcharStatus VARCHAR, OUT varcharName VARCHAR)
BEGIN
  DECLARE intID INT;
  DECLARE varcharStatus, varcharName VARCHAR;
  SELECT * INTO intID, varcharStatus, varcharName FROM `tCandidates`;
  RETURN intID, varcharStatus, varcharName;
END

DELIMITER ;



Подправил но ошибка осталась

Автор: vlad275 8.10.2009, 13:32
Не могу найти ошибку. Так тоже не работает:

Код

DELIMITER $$
DROP PROCEDURE IF EXISTS `variantdialog_99k_db1`.`p4` $$
CREATE PROCEDURE `variantdialog_99k_db1`.`p4` (OUT intID INT, OUT varcharStatus VARCHAR)
BEGIN
  #DECLARE intID INT;
#  DECLARE varcharStatus, varcharName VARCHAR;
  SELECT intID, varcharStatus INTO intID,v archarStatus FROM t;
END $$
DELIMITER ;


Ошибка:

Цитата

Script line: 4    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 ')
BEGIN
  #DECLARE intID INT;
#  DECLARE varcharStatus, varcharName VARCHAR;
' at line 1

Автор: mark2009 12.10.2009, 21:44
У меня всё работает в первоначальном виде. 

Автор: youri 14.10.2009, 22:29
Код

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'

routine_body:
    Valid SQL procedure statement

это много букв? Там еще каринк... в смысле примеры есть ;)
продолжаем смотреть http://dev.mysql.com/doc/refman/5.1/en/create-table.html

Автор: vlad275 15.10.2009, 11:04
Понял. Переменный хранимой процедуры не должны совпадать с названиями полей таблицы. После VARCHAR добавить (255)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)