Возвращаемое значение из хранимой процедуры MySQL

Итак, я, наконец, решил научиться использовать хранимые процедуры, и хотя они у меня действительно работают, я не уверен, правильно ли я делаю - иначе. лучший способ . Итак, вот что у меня есть.

Три процедуры: TryAddTag, CheckTagExists и AddTag.

TryAddTag - это процедура, которая является моим посредником между другим кодом (например, PHP и т. Д.) И двумя другими процедурами. , поэтому вызывается именно этот.


TryAddTag

DELIMITER //
 CREATE PROCEDURE TryAddTag(
  IN tagName VARCHAR(255)
 )

 BEGIN

 -- Check if tag already exists
 CALL CheckTagExists(tagName, @doesTagExist);

 -- If it does not exist, add it
 IF @doesTagExist = FALSE THEN
  CALL AddTag(tagName);
 END IF;

END //
DELIMITER ;


AddTag

DELIMITER //
 CREATE PROCEDURE AddTag(
  IN tagName VARCHAR(255)
 )
 BEGIN

 INSERT INTO
  tags
 VALUES(
  NULL,
  tagName
 );

END //
DELIMITER ;


CheckTagExists

DELIMITER //
 CREATE PROCEDURE CheckTagExists(
  IN
   tagName VARCHAR(255),
  OUT
   doesTagExist BOOL
 )
 BEGIN

 -- Check if tag exists
 SELECT
  EXISTS(
   SELECT
    *
   FROM
    tags
   WHERE
    tags.NAME = tagName
  )
 INTO
  doesTagExist;

END //
DELIMITER ;


Мои проблемы связаны с этим и с использованием @doesTagExist.

-- Check if tag already exists
CALL CheckTagExists(tagName, @doesTagExist);

Правильно ли использовать одну из этих переменных? И / или как я могу использовать переменную DECLARE'd для сохранения результата CheckTagExists в TryAddTag? Я ожидал чего-то вроде

...
DECLARE doesTagExist BOOL;
SET doesTagExist = CheckTagExist('str');
...

или чего-то в этом роде ...

6
задан Dan 6 December 2010 в 02:38
поделиться