2013-02-18 3 views
3

아래의 저장된 함수에 대해 올바른 플래그가 있습니다. CONTAINS SQL 또는 NO SQL?MySQL의 함수 저장 : SQL 또는 NO SQL 포함?

CREATE FUNCTION BigIntHash(str VARCHAR(255)) RETURNS BIGINT UNSIGNED DETERMINISTIC 
RETURN CONV(SUBSTRING(CAST(SHA(str) AS CHAR), 1, 15), 16, 10) 

CREATE FUNCTION upi(a VARCHAR(14), b INT(8) UNSIGNED, c VARCHAR(13)) RETURNS BIGINT UNSIGNED DETERMINISTIC 
RETURN IF(a IS NULL, 
    IF(b IS NULL, 
    IF(c IS NULL, 
     NULL, 
     BigIntHash(CONCAT("a-", a)) 
    ), 
    BigIntHash(CONCAT("b-", b)) 
), 
    BigIntHash(CONCAT("c-", c)) 
) 

정의는 http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html에 있지만 난 아직 확실하지 않다 :

  • 는 SQL 루틴 읽기 문을 포함하거나 기록하지 않음을 나타냅니다 CONTAINS 데이터. 이러한 특성 중 어느 것도 명시 적으로 지정되지 않은 경우 이것이 기본값입니다. 이러한 명령문의 예로 SET @x = 1 또는 DO RELEASE_LOCK ('abc')이 있습니다.이 명령은 데이터를 읽거나 쓰지는 않습니다.

  • NO SQL은 루틴에 SQL 문이 없음을 나타냅니다.

답변

1

테이블, 커서 또는 변수의 데이터에 액세스하지 않으므로 둘 다 NO SQL입니다. 기능과 같은 CONV()SHA() 또는 CONCAT()이 장에서 http://dev.mysql.com/doc/refman/5.1/en/sql-syntax.html

공지 사항을 언급되지 않은 : SQL 문이 볼 구성하는 것에 대한 참조를 들어

.

+0

감사합니다. – Jan