문제

MS SQL 서버 배경에서 왔습니다. Navicat 8 관리자 도구와 함께 MySQL을 사용하여 새로운 프로젝트 작업. 좋아요, 여기 질문이 있습니다. 일반적으로 MS Land에서 작업 할 때 일부 데이터를 업데이트하려면 저장 프로 시저를 사용하여 다음을 수행합니다.

Drop Procedure spNew
Create Procedure spNew (@P_Param)

UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param

나는 Navicat 내에서 동일한 논리를하려고합니다. 매개 변수를 정의했습니다. (IN '@P_Param' int)

내가 배치 한 정의에서 :

BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = @P_Param
END;

저장된 절차를 저장하려고 할 때이 오류가 발생합니다. "1064- SQL 구문, blah, blah, blah에 오류가 있습니다."

누구든지 적어도 나를 올바른 방향으로 가리킬 수 있습니까?

감사.

도움이 되었습니까?

해결책

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;

주목하십시오 MySQL 구문과 전반적인 이데올로기는 다음과 같습니다 매우 그것과 다릅니다 SQL Server.

구분기를 설정해야 할 수도 있습니다.

DELIMITER $$

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;
$$

DELIMITER ;

btw, 나는 당신이 실제로 당신의 테이블에 전화하지 않는다고 가정하고 있습니다. "Table", 그것은 예약 된 단어이기 때문에.

그렇게한다면 이와 같이 백 티크에 넣어야합니다.

DELIMITER $$

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE `Table`
     SET    `Field` = 'some value'
     WHERE  `ID` = P_Param;
END;
$$

DELIMITER ;

다른 팁

MySQL 저장된 절차에 대한 매개 변수는 @로 접두사 또는 선언 또는 사용시 인용되지 않습니다. 그러나 로컬 변수는 @로 접두사입니다.

노력하다:

DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param
END;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top