2016-09-09 4 views
0

문제는 내가 쉘 (bash)에서 직접 함수를 작성하고 있습니다. 일부 IDE에서 구문을 번역하려는 중입니다. 원래의 기능은 다음과 같습니다 내가 잘못 무엇MySql 함수 세금 (IVA 계산)

CREATE FUNCTION CalculoIVA(x INT)RETURNS INT DETERMINISTIC 
BEGIN 
    DECLARE IVA INT 
    SET IVA = x *1.16 
    RETURN IVA 
END; 

:

CREATE FUNCTION CalcIVA(@Price money)RETURNS money 
AS 
BEGIN 
    DECLARE @IVA money 
    SET @IVA = @Price * 1.16 
    RETURN @IVA 
END; 

그래서 mysql> 프롬프트와 함께 작동하는 몇 가지 구문을 변경?

ERROR 1064 (42000) : SQL 구문에 오류가 있습니다. 근처 사용할 수있는 권리 구문 MySQL 서버 버전에 해당하는 설명서를 확인 라인 1

에서
+0

세미콜론을 놓친 곳이 있습니까? 나는 그것을 보지 않는다! – Hell0

답변

1

당신이 원하는 데이터 유형을 결정 '= x * 1.16 RETURN IVA END IVA을 SET'. INT은 1.16 아이디어로 그렇게 열심히 일하지 않습니다. 당신은 INT로 반올림을 잃게됩니다. 당신은 데이터 유형이 DECIMAL(12,2) 또는 FLOAT 그냥 필요한 사항을 변경하고 싶다면 아래 INT

DROP FUNCTION IF EXISTS CalculoIVA; 
DELIMITER $$ 
CREATE FUNCTION CalculoIVA 
(x DECIMAL(12,4)) 
RETURNS DECIMAL(12,4) 
DETERMINISTIC 
BEGIN 
    DECLARE IVA DECIMAL(12,4); -- OR FLOAT etc 
    SET IVA = x *1.16; 
    RETURN IVA; 
END;$$ 
DELIMITER ; 

select CalculoIVA(9.12); 
-- 10.5792 

를 사용하지 않습니다.

참고 : PHPMyAdmin 사용자에게는 DELIMITER 래퍼가 필요하지 않습니다.

+0

고맙습니다. 그것은 그 문제를 해결했습니다. 나는 FLOAT도 시도했지만, 어느 것도 작동하지는 않았다. 감사! – Hell0

+0

yw 언제든지 단지 holler – Drew

+1

이제 코드 블록 안에 세미콜론을 놓친 것을 볼 수 있습니다! – Hell0

관련 문제