학생 테이블에 id와 name이라는 두 개의 필드가 있다고 가정하고 함수의 기능은 id를 기반으로 이름을 찾는 것입니다
create table students(id int,name varchar(100)); insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');
DELIMITER // create function find_student(id int) returns varchar(100) READS SQL DATA begin declare sname varchar(100) default ''; select students.name into sname from students where students.id=id; return sname; end // DELIMITER ;
:
1) 구분 기호를 수정하려면 DELIMITER//를 사용하세요.
MySQL의 기본 명령문 끝 기호는 세미콜론입니다. , 현재 명령문을 자동으로 실행합니다. 함수 정의에는 여러 개의 SQL 문이 포함되어 있으므로 먼저 DELIMITER //를 사용하여 구분 기호를 //로 설정한 다음, 함수 생성 문이 완료된 후 구분 기호를 다시 세미콜론으로 변경하세요.
2) READS SQL DATA
이 문장을 이전에 작성하지 않았지만 mysql이 문장을 생성할 때 오류를 보고하여 오류 코드: 1418이 표시되었습니다. 이 함수에는 DETERMINISTIC, NO SQL 또는 READS SQL DATA가 없습니다. (덜 안전한 log_bin_trust_function_creators 변수를 사용하고 싶을 수도 있습니다)
온라인으로 확인했는데, 이는 mysql 함수 유형이 선언되지 않았음을 의미합니다.
mysql에 bin-log가 활성화되어 있으므로 반드시 함수 유형이 무엇인지 지정합니다.
1 DETERMINISTIC Uncertain
2 NO SQL SQL 문은 없으며 물론 데이터를 수정하지 않습니다.
3 READS SQL DATA 물론 데이터는 수정되지 않습니다.
4 MODIFIES SQL DATA 데이터를 수정하려면
5 CONTAINS SQL에 SQL 문이 포함되어 있습니다
그래서 READS SQL DATA를 추가했습니다
3) 지역 변수 사용
변수 정의: 선언 sname varchar(100) 기본값 ‘’;을 사용하여 지역 변수 sname을 정의합니다.
변수 사용법:
학생의 sname에 select Students.name을 사용할 수 있습니다. 여기서 Students.id=id; 변수에 값을 할당합니다.
set sname=‘test’
select find_student(3);
현재 프로젝트에서 mysql을 생성한 함수 실행 시 오류가 발생했습니다. mysql 생성 함수에 대한 오류 메시지는 다음과 같습니다.
원인: java.sql.SQLException: 이 함수의 선언에는 DETERMINISTIC, NO SQL 또는 READS SQL DATA가 없으며 바이너리 로깅이 활성화되어 있습니다(com.mysql.jdbc에서 덜 안전한 log_bin_trust_function_creators 변수를 *사용하고 싶을 수도 있습니다). SQLError.createSQLException(SQLError.java:965)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
이는 log_bin_trust_function_creators의 기본값이 0이기 때문입니다. 이는 기능 동기화를 허용하지 않습니다. 이 매개변수가 켜져 있으면 생성이 성공합니다.
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
at com. mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2373)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl. java:845)
com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
.. 35 more
활성화 여부 확인:
show variables like '%func%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | ON | +---------------------------------+-------+ 1 row in set (0.00 sec)
활성화되어 있으면 활성화된 것입니다.
set global log_bin_trust_function_creators = 1;
는 이 명령을 통해 설정할 수 있지만 MySQL을 다시 시작한 후에는 유효하지 않게 됩니다.
마지막 단계는 MySQL 데이터베이스 구성 파일을 수정하는 것입니다.
구성 파일 /etc/my.cnf
수정 후 MySQL을 다시 시작하려면 [mysqld]에서 log_bin_trust_function_creators=1을 구성하세요.
위 내용은 Mysql에서 커스텀 함수 생성 및 실행 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!