这个没有固定的标准,我在文中会指出没有固定标准的语句,不过幸运的是这些在我们标准的SQL中很少。
6. CREATE PROCEDURE p2 () LANGUAGE SQL NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '''' SELECT CURRENT_DATE, RAND() FROM t //
上面过程跟下面语句是等效的: CREATE PROCEDURE p2 () SELECT CURRENT_DATE, RAND() FROM t //
特征子句也有默认值,如果省略了就相当于: LANGUAGE SQL NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT ''''
Digressions一些题外话
Digression: 调用p2()//的结果 mysql> call p2() // +--------------+-----------------+ | CURRENT_DATE | RAND() | +--------------+-----------------+ | 2004-11-09 | 0.7822275075896 | +--------------+-----------------+ 1 row in set (0.26 sec) Query OK, 0 rows affected (0.26 sec) 当调用过程p2时,一个SELECT语句被执行返回我们期望获得的随机数。 Digression: sql_mode unchanging 不会改变的
sql_mode mysql> set sql_mode=''ansi'' // mysql> create procedure p3()select''a''||''b''// mysql> set sql_mode=''''// mysql> call p3()// +------------+ | ''a'' || ''b'' | +------------+ | ab | +------------+
MySQL在过程创建时会自动保持运行环境。例如:我们需要使用两条竖线来连接字符串但是这只有在sql mode为ansi的时候才合法。如果我们将sql mode改为non-ansi,不用担心,它仍然能工作,只要它第一次使用时能正常工作。
Exercise 练习
Question 问题 如果你不介意练习一下的话,试能否不看后面的答案就能处理这些请求。 创建一个过程,显示`Hello world`。用大约5秒时间去思考这个问题,既然你已经学到了这里,这个应该很简单。当你思考问题的时候,我们再随机选择一些刚才讲过的东西复习: DETERMINISTIC (确定性)子句是反映输出和输入依赖特性的子句…调用过程使用CALL过程名(参数列表)方式。好了,我猜时间也到了。
Answer 答案 好的,答案就是在过程体中包含 "SELECT ''Hello, world''" 语句 MySQL mysql> CREATE PROCEDURE p4 () SELECT ''Hello, world'' // Query OK, 0 rows affected (0.00 sec) mysql> CALL p4()// +--------------+ | Hello, world | +--------------+ | Hello, world | +--------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
Paramet |