从存储过程调用存储过程和/或使用COUNT

时间:2012-01-26 19:29:31

标签: mysql

好的,首先,我不是一个mysql大师。其次,我进行了搜索,但没有看到任何与mysql相关的内容,而且由于我的数据库知识有限,猜测两种不同数据库类型之间的语法差异并不在卡片中。

我试图在插入行之前确定表中是否已存在特定值。我决定使用两个存储过程来解决这个问题。第一个:

CREATE PROCEDURE `nExists` ( n VARCHAR(255) ) BEGIN
    SELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n) as T;
END

和第二:

CREATE PROCEDURE `createUser` ( n VARCHAR(255) ) BEGIN
    IF (nExists(n) = 0) THEN
        INSERT INTO Users...
    END IF;
END

因此,正如您所看到的,我正在尝试从createUser调用nExists。我得到的错误是没有函数存在,名称为nExists ...因为它是一个存储过程。我不清楚区别是什么,或者为什么需要这样的差异,但我是一个Java开发人员,所以也许我在这里错过了一些与DB相关的大概念。

你们有没有机会帮助我? 感谢

2 个答案:

答案 0 :(得分:0)

只需将用户名(或主应用程序索引为)UNIQUE索引,然后无需测试:只需尝试插入新记录即可。如果它已存在,请处理错误。如果成功,一切都很好。

它可以(而且应该)都是一个存储过程。

答案 1 :(得分:0)

我不确定它对你有什么帮助,但是......

  

为什么SELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n)而不只是SELECT COUNT(*) FROM Users WHERE username=n