MySQL存储函数:是否包含SQL?

MySQL存储函数:是否包含SQL?,mysql,stored-functions,Mysql,Stored Functions,对于下面的存储函数,哪个是正确的标志:包含SQL还是不包含SQL CREATE FUNCTION BigIntHash(str VARCHAR(255)) RETURNS BIGINT UNSIGNED DETERMINISTIC RETURN CONV(SUBSTRING(CAST(SHA(str) AS CHAR), 1, 15), 16, 10) 及 定义已打开,但我仍不确定: 包含SQL表示例程不包含读取或写入数据的语句。如果没有明确给出这些特征,则这是默认值。这类语句的示例有SET

对于下面的存储函数,哪个是正确的标志:包含SQL还是不包含SQL

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

定义已打开,但我仍不确定:

  • 包含SQL表示例程不包含读取或写入数据的语句。如果没有明确给出这些特征,则这是默认值。这类语句的示例有SET@x=1或DO RELEASE_LOCK('abc'),它们执行时既不读取也不写入数据

  • 无SQL表示例程不包含SQL语句


两者都是
无SQL
,因为它们不访问表、游标或变量中的数据

有关构成SQL语句的内容的参考,请参见:

请注意,像
CONV()
SHA()
CONCAT()
这样的函数在本章中没有提到

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))
)