3

MySQL의 함수 IS_IN_ENUM('value', 'val1', 'val2', 'val3')을 생성하려고하는데 'value'가 ('val1', 'val2', 'val3')에 있으면 true를 반환합니다. 나는 SELECT 'value' IN ('val1', 'val2', 'val3')을 할 수 있다는 것을 알고 있지만 그러한 기능을 만드는 법을 배우기를 원하기 때문에 덜 복잡합니다. 나는 당신에게 예를동적 인수 개수로 MySQL 저장 함수 만들기

은 다음 ADD 기능을 고려 : 나는 SELECT my_add(1, 1)을 할 경우에 나는 2를 얻을

CREATE FUNCTION my_add (
    a DOUBLE, 
    b DOUBLE 
) 
RETURNS DOUBLE 
BEGIN 

    IF a IS NULL THEN 
     SET a = 0; 
    END IF; 

    IF b IS NULL THEN 
     SET b = 0; 
    END IF; 

    RETURN (a + b); 
END; 

을 (와우!). 내가 전화를 할 수 있도록이 기능을 향상시킬 수있는 방법

:

SELECT my_add(1, 1); -- 2 
SELECT my_add(1, 1, 1); -- 3 
SELECT my_add(1, 1, 1, 1); -- 4 
SELECT my_add(1, 1, 1, 1, 1, 1, .....); -- n 
+0

한 가지 질문에 하나의 매개 변수로 여러 매개 변수를 전달할 수 없습니까? 'MYFUNCT ((''1 ','2 ','3 '))'? –

+0

MYFUNCT ("1,2,3")'와 같은 SET을 전달한 다음 SET 준비 기능으로 재생할 수 있습니다. 그러나 그것은 정말로 친근하지 않습니다. –

답변

4

당신이 보여 함수 예는 저장 함수 아닌 UDF이다. @Enzino가 대답 한대로 MySQL의 저장 함수는 다양한 인수를 지원하지 않습니다.

MySQL UDF는 C 또는 C++로 작성되고 동적 객체 파일로 컴파일 된 다음 different syntax of CREATE FUNCTION으로 MySQL 서버와 연결됩니다.

UDF 작성에 대한 자세한 내용은 http://dev.mysql.com/doc/refman/5.5/en/adding-udf.html을 참조하십시오. 그러나 당신이 이것을하기 위해 C/C++ 코드를 작성하기를 원한다면 나는 모른다.

MySQL UDF는 다양한 수의 인수를 지원합니다. 사실, 모든 UDF는 임의의 수의 인수를 내재적으로 허용하며 주어진 인수의 수와 유형이 함수에 유효한지 판별하는 것은 프로그래머에게 달려 있습니다. UDF의에서

처리 함수 인수 나는 경우에 true를 돌려줍니다 ('값', 'val1과' '을 val2', 'val3')를 MySQL의 기능 IS_IN_ENUM를 만들기 위해 노력하고 http://dev.mysql.com/doc/refman/5.5/en/udf-arguments.html

+0

아니, C 'varargs'에 해당하는 MySQL을 찾고 싶습니다. MySQL은 'CONCAT'과 같은 함수를 사용합니다. 예를 들어, 우리가 원하는만큼의 인수를 취할 수 있습니다. 물론 가능하다면. 저장 함수와 UDF의 차이점을 지적 해 주셔서 감사합니다. 이미 읽은 곳이지만 잊어 버렸습니다. –

+0

'CONCAT()'는 C에서 내장 함수로 구현됩니다. 변수 arg를 가진 많은 내장 함수가 있습니다. 나 자신이 두 개의 인수를 지원하는'SHA2()'함수를 공헌했다. 두 번째 인수는 선택 사항이다. 하지만 이렇게하려면 C로 구현해야했습니다. –

1

에 설명되어 있습니다 'value'는 ('val1', 'val2', 'val3')에 있습니다.

이 당신은 기본 기능 필드를 사용할 수 있습니다

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_field

IS_IN_ENUM 필드를 의미 = 0

확인도 FIND_IN_SET

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_find-in-set

저장 기능을! 다양한 수를 지원하지 않습니다. 매개 변수.

지금, 당신은 정말, MySQL 서버 코드에서 이러한 기본 기능을 직접 구현 sql/item_create.cc

0

오래된 질문에 Create_native_func의 서브 클래스보고 싶어하지만 당신은 그 구축이 이미 있기 때문에 is_in_enum 만들 필요가 돈합니다. 단순히 테이블에서 true를 선택하십시오. 여기서 값 IN (1,2,3,4);