2012-07-26 3 views
1

DECLARE, CALL 기능 및 IF 설정과 관련된 문제가 있습니다. 무엇 내가 지금까지있는 것은 :MySQL INSERT 변수가 중복되지 않는 곳

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' 문을 사용할 수 없습니다. 당신은 당신의 프로 시저 주위에 구분자가 빠져 있습니다. –

답변

0

길이를 지정하지 않고 project_name을 varchar로 선언했습니다. (100)

1

시도를 VARCHAR로 변경 :

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

+0

그리고 또 하나 나는 어떻게 이것을 넣어야합니까 ** SELECT count (project_id) INTO var_project_no FROM atm_projects where project_name = 'PROJECT NAME'; ** 변수에? – Empeus

+0

INTO 절을 사용하면 그렇게 할 수 있습니다. 아니 그 다소 PHP 함수에서 다른, 저장 프로 시저 (SP)는 기본적으로 쿼리의 집합이며 다른 조건. 당신은 값을 반환 할 수있는 함수를 mysql에 만들 수 있지만 sp를 사용할 수 없다. – Omesh

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;