안녕하세요.
mysql 함수를 생성하려 하는데 구문오류가 계속 뜹니다..
검색해서 나오는 갖가지 예제들도 참고해서 이것저것 바꾸어 보았는데
뭐가 잘못된건지 찾을 수가 없어서.. 혹시 도움을 받을 수 있을까 싶어 글을 올립니다.
mssql에 있던 DB를 그대로 mysql로 옮기는 업무 중이라 함수도 똑같이 만드는 중입니다.
mssql에 있던 함수를 그대로 갖다놓고 mysql 형식을 검색해보며 그에 맞게 바꾸는 식으로 하고 있습니다..
오히려 안쪽 select문 같은건 테스트도 해봤고 한데.. 아래쪽도 분명 오류가 날건데 그쪽은 가보기도전에
윗쪽에 구문이 대체 뭐가 잘못된건지.. 조금씩 조금씩 변형을 줘 봐도 계속 같은 부분에서 맴도네요... ㅠㅠ
감사합니다.
---------------------------------
오류 코드: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@pointLon REAL, @pointLat REAL)
RETURNS @ContainsData TABLE
(
BW_AREA_ID V' at line 2
----------------------
DELIMITER $$
DROP FUNCTION IF EXISTS db1.myfn_ContainsPointInPolygon$$
CREATE FUNCTION `db1`.`myfn_ContainsPointInPolygon`(@pointLon REAL, @pointLat REAL)
RETURNS @ContainsData TABLE
(
BW_AREA_ID VARCHAR(3),
BW_AREA_NAME VARCHAR(20)
)
AS
BEGIN
DECLARE @BW_AREA_ID VARCHAR(3)
DECLARE @BW_AREA_NAME VARCHAR(20)
DECLARE @pt REAL
SET @pt=REAL::POINT(@pointLat, @pointLon)
-- 유역
SELECT LIMIT 1 @BW_AREA_ID=AREA_ID, @BW_AREA_NAME=AREA_NAME
FROM (SELECT ST_Intersects(geom,@pt) AS intpt, BW_CODE AS AREA_ID, BW_NAME AS AREA_NAME
FROM BW_AREA_ST) RES_TABLE
WHERE RES_TABLE.intpt > 0;
IF (@@ERROR <> 0)
BEGIN
SET @BW_AREA_ID='000'
SET @BW_AREA_NAME='ERROR'
END
INSERT INTO @ContainsData VALUES
(@BW_AREA_ID, @BW_AREA_NAME)
RETURN
END
END$$
DELIMITER ;
Comment 1
-
항해자™
2016.12.06 17:42
펑션이나 프로시저 파라미터는 '@'이 아니라 '$'로 시작합니다,,,
declare 할 때도 마찬가지로 '$'으로 선언할 수 있으며, '@'으로 시작되는 변수는 declare 하지 않고 씁니다,,,