RETURNS 절은 필수 함수에 대해서만 지정될 수 있습니다. 함수의 반환 형식을 나타내고 함수 본문에 RETURN 값 문을 포함 해야 합니다. RETURN 문이 다른 형식의 값을 반환하는 경우 값은 적절한 형식에 강제 변환됩니다. 예를 들어 함수가 RETURNS 절에서 ENUM 또는 SET 값을 지정하지만 RETURN 문이 정수를 반환하는 경우 함수에서 반환된 값은 SET 멤버 집합의 해당 ENUM 멤버에 대한 문자열입니다. 그러나 v_counter가 1과 같지 않으면 테이블 작성자에서 해당 author_name과 일치하지 않습니다. 대신 MESSAGE_TEXT 알림이 발신자에게 반환되어 작성자가 발견되지 않았다는 것을 알리게 됩니다. 이 예제에서는 mysql 클라이언트 구분 기호 명령을 사용하여 에서 문 구분 기호를 변경합니다. 프로시저가 정의되는 동안 // 이렇게 하면 다음을 사용할 수 있습니다. mysql 자체에 의해 해석되는 것이 아니라 서버로 전달되는 프로시저 본문에 사용되는 구분기호입니다. 섹션 24.1, “저장된 프로그램 정의”를 참조하십시오. 우리가 알고있는 몇 author_name의 에 f_auth_ins 함수를 호출 할 수 있습니다 : 우리는 우리가 결과를 반환 할 때 함수가 가장 잘 사용된다는 것을 알고 있습니다. 따라서 값을 삽입하거나 업데이트하는 것과 같은 테이블을 조작하기 위한 저장된 함수를 만들 때 는 저장 프로시저와 다소 비슷합니다.
다음 예제에서는 `student_marks`라는 테이블의 값을 업데이트하는 `tbl_update`라는 저장된 함수를 만듭니다. 해당 변수를 확인합니다. author_name이 있는 경우 이 변수의 값은 1이 되고 실행은 여기에서 블록의 ELSE 세그먼트로 건너뛰고 궁극적으로 는 v_auth_id를 INSERT의 호출자에게 반환합니다. 다음은 테이블 작성자에서 존재하지 않는 일치가 있는 author_id를 삽입하려고 하면 알려주는 향상된 함수입니다. author_name 열과 v_author_nameprocedure 변수는 모두 모든 대문자 등가물과 비교됩니다. 먼저 CREATE FUNCTION 절 다음의 저장된 함수 이름을 지정합니다. mysql.user 시스템 테이블에 나열된 MySQL 계정 수의 수를 표시하는 다음 절차를 고려하십시오. 기본적으로 모든 매개 변수는 IN 매개 변수입니다. 매개 변수에 대한 IN OUT 또는 INOUT 수정자를 지정할 수 없습니다. SQL SECURITY DEFINER 특성으로 정의된 저장된 루틴본내에서 CURRENT_USER 함수는 루틴의 DEFINER 값을 반환합니다. 저장된 루틴 내에서 사용자 감사에 대한 자세한 내용은 섹션 6.2.22, “SQL 기반 계정 활동 감사”를 참조하십시오. IN 매개 변수는 값을 프로시저로 전달합니다.
프로시저가 값을 수정할 수 있지만 프로시저가 반환될 때 수정 사항은 호출자에게 표시되지 않습니다. OUT 매개 변수는 프로시저에서 호출자에게 값을 다시 전달합니다. 초기 값은 프로시저 내에서 NULL이며 프로시저가 반환될 때 해당 값은 호출자에게 표시됩니다. INOUT 매개 변수는 호출자에 의해 초기화되고 프로시저에 의해 수정될 수 있으며 프로시저가 반환될 때 프로시저에 의해 변경된 모든 변경 사항을 호출자에게 볼 수 있습니다. NOW() 함수(또는 해당 동의어) 또는 RAND(가 포함된 루틴은 결정적이지 않지만 복제가 안전한 경우일 수 있습니다.) NOW()의 경우 이진 로그에 는 타임스탬프가 포함되고 올바르게 복제됩니다. RAND()는 루틴을 실행하는 동안 한 번만 호출되는 한 올바르게 복제됩니다. (루틴 실행 타임스탬프와 난수 시드를 마스터와 슬레이브에서 동일한 암시적 입력으로 간주할 수 있습니다.) 내가 쓴 이전 블로그 게시물, 예를 들어 MySQL에서 외래 키 제약 조건이있는 열에 대한 SELECT 문으로 INSERT를 사용하였습니다. 각 INSERT에 대해 SELECT를 함수를 `래핑`하여 자동화할 수 있으며 이 블로그 게시물의 초점이 될 것입니다.