3

对于下面的存储函数,哪个是正确的标志:CONTAINS 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但我仍然不确定:

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

  • NO SQL表示例程不包含 SQL 语句。

4

1 回答 1

1

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

有关什么构成 SQL 语句的参考,请参阅:http ://dev.mysql.com/doc/refman/5.1/en/sql-syntax.html

请注意本章中提到CONV() SHA()或未提及的函数。CONCAT()

于 2013-02-18T15:44:19.203 回答