2016-01-21 4 views
0

Эта Хранимая процедура должна возвращать значение false, если значение, переданное в параметре, не существует в таблице.Сохраненная процедура всегда возвращает false

CREATE DEFINER=`listsjag_user`@`%` PROCEDURE `Select_ReferenceAvailability`(IN ref VARCHAR(45)) 
BEGIN 

IF EXISTS (
SELECT * FROM tbl_dataLibrary 
WHERE itemreference = @ref 
) THEN 
SELECT 'true'; 
ELSE 
SELECT 'false'; 
END IF; 

     END 

Он возвращает значение true для всех значений, но в столбце item only есть только одно значение.

У кого-нибудь есть идеи?

+0

Изменить '@ ref' на' ref'. –

ответ

0

Хранимая процедура MySQL не может действительно возвращает значение. Вы можете либо передать параметр OUT, либо изменить его, либо преобразовать свою процедуру в функцию.

CREATE FUNCTION ReferenceAvailability (IN ref VARCHAR(45)) 
RETURNS boolean 
BEGIN 
IF(EXISTS(SELECT * FROM tbl_dataLibrary WHERE itemreference = @ref)) THEN 
    RETURN 1; 
END IF; 

RETURN 0; 
END; 

Я изменил ваше истинное/ложное 1/0, не стесняйтесь, чтобы вернуться, но вам нужно будет вернуть VARCHAR (5).

Используйте функцию отборное так:

SELECT ReferenceAvailability(...) 

Надежда, что помогает.

+0

Вы упустили несоответствие между параметром 'ref' и пользовательской переменной' @ ref'. Это два разных пространства имен в двух разных областях (программа против сеанса), поэтому ваш ответ также неверен. Кроме того, хранимые процедуры могут возвращать результаты и могут иметь параметры «OUT» или «INOUT». –

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