2011-01-11 3 views
0

Эта проблема стоила мне почти час, и я знаю, что это что-то простое.MySQL Хранимая процедура Объявлять выпуск

Я получаю следующее сообщение об ошибке:

#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 'IN VARCHAR(256), hl7PatientId IN VARCHAR(256)) 
BEGIN 

DECLARE mainQueue INT' at line 1 

Вот мой запрос, который смотрит прямо на меня:

DROP PROCEDURE IF EXISTS insert_data; 

CREATE PROCEDURE `insert_data`(hl7PatientName IN VARCHAR(256), hl7PatientId IN VARCHAR(256)) 
BEGIN 

DECLARE mainQueue INT DEFAULT 1; 

SELECT `queueid` INTO mainQueue FROM `queues` WHERE `description` LIKE 'Main' AND `enabled` = 1 LIMIT 1; 

INSERT INTO `queue_data` 
(`queueid`, `patientname`, `patientid`, `location`, `creationtime`, `priority`) 
VALUES 
(mainQueue, hl7PatientName, hl7PatientId, 'QUEUE_NUMBER', TIMESTAMP(), ''); 

END; 

Я использую MySQL 5.0.77 для этого.

Может ли кто-нибудь увидеть что-нибудь в этом неправильном?

ответ

2

Я немного прибрал ваш пример - обратите внимание на использование разделителя и в параметрах!

drop procedure if exists insert_queue_data; 

delimiter # 

create procedure insert_queue_data 
(
in p_patientname varchar(255), -- size ? i always prefix my params p_ and keep the same name as the db field 
in p_patientid varchar(255) -- size ? are you sure this isnt an integer ? 
) 
begin 

-- i always prefix my variables v_ and keep same name as the db field 

declare v_queueid int unsigned default 1; 

select queueid into v_queueid from queues where 
description like 'Main' and enabled = 1 limit 1; 

insert into queue_data(queueid, patientname, patientid, location, creationtime, priority) values 
(v_queueid, p_patientname, p_patientid, 'QUEUE_NUMBER', now(), ''); 

end# 

delimiter ; 
+0

Я заметил, что мой IN был в неправильном месте, а затем я попытался сделать демиметр, но не смог заставить его работать, но ваша работа прекрасна. Поэтому я не уверен, что я делаю неправильно. Спасибо! – Khirok

0

Обратный порядок IN и имя параметра.

...(IN hl7PatientName VARCHAR(256), IN hl7PatientId VARCHAR(256))... 
+0

Это была одна из проблем. Благодарю. – Khirok

Смежные вопросы