2016-09-16 1 views
0

저는 MySQL에 상당히 익숙하지만 데이터베이스 테이블에 저장된 JSON 객체의 유효성을 검사하는 함수를 만들고 싶습니다.JSON 유효성을 검사하는 MySQL 함수를 어떻게 만들 수 있습니까?

기능을 만드는 방법에 대한 정보를 찾았지만 제대로 작동하지 않는 것처럼 보일 수 있습니다. 지나치게 복잡해 보이지는 않지만 아마도 적절한 구문을 사용하지 않는 것 같습니다. 이 코드를 실행하려고하면

DELIMITER // 

CREATE FUNCTION CHECKJSON(DB_NAME varchar(255), TABLE_NAME varchar(255), JSON_COLUMN varchar(255)) 
RETURNS varchar(300) 
BEGIN 
    DECLARE notNullCount int; 
    DECLARE validJSONCount int; 
    DECLARE result varchar(300); 

    SET notNullCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_COLUMN IS NOT NULL); 
    set validJSONCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_VALID(JSON_COLUMN) > 0); 

    CASE 
     WHEN (validJSONCount = notNullCount) THEN 
      SET result = CONCAT('VALID JSON COUNT: ', validJSONCount) 
     ELSE 
      SET result = CONCAT('INVALID JSON COUNT: ', (notNullCount - validJSONCount)) 
    END; 
    RETURN result; 
END // 

DELIMITER ; 

, 나는 다음과 같은 오류 메시지가 얻을 : 여기

내 코드입니다 "오류 코드 : 당신은 당신의 SQL 구문에 오류가 (1064); 설명서를 확인 올바른 구문을 사용하기위한 MySQL 서버 버전에 해당하는 'ELSE SET result = CONCAT ('INVALID JSON COUNT : ', (notNullCount - validJSONC'at 14 번째 줄)

이 코드의 개선 방법에 대한 의견 고마워요!

답변

0

You'r 전자가 몇 개 빠져있다. 케이스를 끝내려면 END CASE 여야합니다.

 
DELIMITER // 

CREATE FUNCTION CHECKJSON(DB_NAME varchar(255), TABLE_NAME varchar(255), JSON_COLUMN varchar(255)) 
RETURNS varchar(300) 
BEGIN 
    DECLARE notNullCount int; 
    DECLARE validJSONCount int; 
    DECLARE result varchar(300); 

    SET notNullCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_COLUMN IS NOT NULL); 
    set validJSONCount = (SELECT count(*) FROM DB_NAME.TABLE_NAME WHERE JSON_VALID(JSON_COLUMN) > 0); 

    CASE 
     WHEN (validJSONCount = notNullCount) THEN 
      SET result = CONCAT('VALID JSON COUNT: ', validJSONCount) ; 
     ELSE 
      SET result = CONCAT('INVALID JSON COUNT: ', (notNullCount - validJSONCount)) ; 
    END CASE; 
    RETURN result; 
END // 

DELIMITER ; 
+0

감사합니다! 나는 함수를 성공적으로 만들었지 만 지금은 함수를 호출 할 수 없다. 내 코드는 다음과 같습니다. CHECKJSON (evidenceStaging, INEGI_ROADS_20150430_MX_9, value); 다음 오류가 발생합니다. 오류 코드 : 1064. SQL 구문에 오류가 있습니다. 귀하의 MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문이 1 행의 'CHECKJSON (evidenceStaging, INEGI_ROADS_20150430_MX_9, value)'근처에서 사용되는지 확인하십시오. –

+0

또한 CHECKJSON 기능의 탐색기 기능에서 렌치를 눌렀을 때 다음과 같은 메시지가 나타납니다 : 서버에서 검색된 DDL을 구문 분석하는 동안 오류가 발생했습니다. DDL을 보거나 처리를 취소 하시겠습니까? 내 코드에 문제가있을 수 있다고 생각합니다. 기능을 편집 할 때 'WHEN'을 좋아하지 않는 것 같습니다. 생각? –

+0

함수를 호출하려면 select를 사용해야합니다. 확인을 선택하십시오 (....); –

관련 문제