일은

2013-08-08 2 views
0

:일은

SET GLOBAL log_bin_trust_function_creators=TRUE; 

DROP FUNCTION IF EXISTS GreaterCircleNm; 
DELIMITER go 
CREATE FUNCTION GreaterCircleNm(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS float 
BEGIN 
    DECLARE pi, q1, dist FLOAT; 
    SET pi = PI(); 
    SET lat1 = lat1 * pi/180; 
    SET lon1 = lon1 * pi/180; 
    SET lat2 = lat2 * pi/180; 
    SET lon2 = lon2 * pi/180; 
SET q1 = ACOS(sin(lat1)*sin(lat2)+COS(lat1)*COS(lat2)*COS(lon1-lon2)); 
SET dist = q1*180*60/pi; 
RETURN dist; 
END; 
go 
DELIMITER ; 

을 나는 오류가 나는 슈퍼 권한이없는 말해 얻을. 호스팅 제공 업체는 이미 (1) 권한을 얻거나 (2) 코드를 실행하게 할 수 없다고 말했습니다. 그로 인해 함수를 생성하면서 SET GLOBAL log_bin_trust_function_creators=TRUE;을 제거하는 옵션 (3)이 나에게 남습니다. 이것이 가능한지 확실하지 않지만 도움을 주시면 감사하겠습니다.

+0

시도해 보셨습니까? – GolezTrol

+0

@ GolezTrol 내가 뭘 시도 했니? 이 코드를 실행하고 있습니까? 예. SET GLOBAL 부분을 제거 하시겠습니까? 예. –

+0

@GolezTrol 당신은 아무 의미가 없습니다. 이 두 가지 일을했음을 의미하는 것이라면, 나는 그것이 작동하지 않는다고 말했기 때문에 분명히 모든 것을 읽지 않았습니다. 내가 왜 이것을 게시합니까? –

답변

1

SET GLOBAL SUPER 특권이 없으면 아무 것도 할 수 없습니다.
http://dev.mysql.com/doc/refman/5.6/en/set-statement.html

전역 변수를 설정하려면 SUPER 권한이 필요합니다.

이 변수에 대한 SET SESSION 수 없습니다 :

mysql> SET SESSION log_bin_trust_function_creators=0; 
ERROR 1229 (HY000): Variable 'log_bin_trust_function_creators' 
is a GLOBAL variable and should be set with SET GLOBAL 

이 기반 GLOBAL 만하지 SESSION으로 변수를 나열 documentation에 의해 확인된다.

아니요,이 문제를 해결할 수 없습니다. SUPER 특권을 부여하고 싶지 않으면 제공자에게 기능을 만들어달라고 요청해야합니다.

다른 사람에게 SUPER 권한을 허용하는 다른 호스팅 계획을 가져 오십시오.

그렇지 않으면 SQL 저장 함수에서이 계산을 수행하지 마십시오.

+0

"그렇지 않으면 SQL 저장 함수에서이 계산을 수행하지 마십시오." - 이것은 아마도 처음 일 것입니다. 이와 같은 간단한 계산은 거의 항상 데이터베이스가 아니라 클라이언트 측에서 실행되어야합니다. –

+0

@KKobayashi, 그 중 하나의 옵션이지만, 나는 클라이언트 측에서 유일한 다른 선택을한다는 것을 의미하지는 않습니다. SQL 쿼리의 select-list 또는 where 절에서 전체 식으로 계산을 수행 할 수 있습니다. 계산 결과는 행 제한의 조건으로 사용될 수 있습니다. –

관련 문제