2012-07-26 74 views
1

我对DECLARE,CALL函数和IF settelment有一些麻烦。我至今是:MySQL INSERT WHERE变量不重复

CREATE PROCEDURE number_of_projects(project_name VARCHAR) 
BEGIN 
    DECLARE variable INT; 
    SET variable = 4; 
    SELECT variable; 

    SELECT count(project_id) FROM atm_projects WHERE project_name = variable; 
END 

IF number_of_projects("PROJECT NAME") = 0 
    THEN 
    INSERT INTO atm_projects(project_id,project_name,added_from_mti) 
    VALUES (project_id,'PROJECT NAME',1) 
ENDIF 

的主要目标是将行插入其中project_name不重复的表。

我可以将project_name更改为UNIQUE密钥,但请告诉我我的代码有什么问题,我该如何解决这个问题?

我需要了解一个PROCEDURE,CALLprocedure,IF是如何工作的。

+0

不能使用'if'声明函数,触发器或过程之外。并且你的程序周围缺少分隔符。 – 2012-07-26 11:05:48

回答

0

您已声明project_name为varchar,但未指定长度。将其更改为VARCHAR(100)

1

尝试:

CREATE PROCEDURE number_of_projects(project_name VARCHAR(255)) 
BEGIN 
    DECLARE var_project_no INT; 
    SET var_project_no = 0; 
    SELECT var_project_no; 

    SELECT count(project_id) INTO var_project_no FROM atm_projects WHERE var_project_name = 4; 


    IF var_project_no = 0 
    THEN 
     INSERT INTO atm_projects(project_id,project_name,added_from_mti) 
     VALUES (project_id,'PROJECT NAME',1) 
    END IF; 
END; 
+0

我只需要检查,如果project_name不像“PROJECT1”==“PROJECT1”重复,另一件事,PROCEDURE就像一个函数,在PHP中的方法? – Empeus 2012-07-26 11:27:11

+0

和一件事我怎么把这个** SELECT计数(project_id)INTO var_project_no从atm_projects WHERE project_name ='PROJECT NAME'; **到一个变量? – Empeus 2012-07-26 11:29:40

+0

使用INTO子句你可以做到这一点。没有它与PHP函数有所不同,存储过程(sp)基本上是一组查询和其他条件。你可以在mysql中创建函数,它可以返回值,但不能。 – Omesh 2012-07-26 11:36:35

0
CREATE PROCEDURE number_of_projects(project_name VARCHAR(255)) 
BEGIN 

if NOT exists(SELECT Top 1 1 FROM atm_projects WHERE var_project_name = 4) 
BEGIN 
    INSERT INTO atm_projects(project_id,project_name,added_from_mti) 
    Select project_id,project_name ,1 
END 
END;