MySQL 存储函数:包含 SQL 还是没有 SQL?
Posted
技术标签:
【中文标题】MySQL 存储函数:包含 SQL 还是没有 SQL?【英文标题】:MySQL stored function: CONTAINS SQL or NO SQL? 【发布时间】:2013-02-18 15:32:04 【问题描述】:对于下面的存储函数,哪个是正确的标志: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 语句。
【问题讨论】:
【参考方案1】:两者都是NO SQL
,因为它们不访问表、游标或变量中的数据。
有关什么构成 SQL 语句的参考,请参阅:http://dev.mysql.com/doc/refman/5.1/en/sql-syntax.html
请注意,本章未提及 CONV()
SHA()
或 CONCAT()
等函数。
【讨论】:
以上是关于MySQL 存储函数:包含 SQL 还是没有 SQL?的主要内容,如果未能解决你的问题,请参考以下文章
Learning-MySQL:视图触发器存储过程函数流程控制