MySQL 9.0 发行说明
简单语句返回一个结果集,可用于访问数据(行)、元数据和诊断信息。
简单语句是静态的,在创建后无法修改;换句话说,它无法参数化。包含一个或多个 ?
参数标记的简单语句会引发错误。有关允许在执行时指定参数的任意值的预处理语句的信息,请参见 第 27.3.7.2 节,“预处理语句”。
大多数在 MySQL 中有效的 SQL 语句都可以用作简单语句;有关例外情况,请参见 存储例程中不允许的 SQL 语句。以下是使用 JavaScript 简单语句 API 的存储过程的最小示例
CREATE PROCEDURE jssp_vsimple(IN query VARCHAR(250))
LANGUAGE JAVASCRIPT AS $$
let stmt = session.sql(query)
let result = stmt.execute()
console.log(result.getColumnNames())
let row = result.fetchOne()
while(row) {
console.log(row.toArray())
row = result.fetchOne()
}
$$;
此存储过程接受一个输入参数:SQL 语句的文本。我们通过将此文本传递给全局 Session
对象的 sql()
方法来获取 SqlExecute
的实例。调用此实例的 execute()
方法将产生一个 SqlResult
;我们可以使用 getColumnNames()
获取此结果集中的列名,并通过调用 fetchOne()
迭代其所有行,直到它无法返回另一行(也就是说,直到该方法返回 false
)。列名和行内容使用 console.log()
写入 stdout
。
我们可以使用 world
数据库中两个表的简单联接来测试此过程,然后检查 stdout
,如下所示
mysql> CALL jssp_vsimple("
"> SELECT c.Name, c.LocalName, c.Population, l.Language
"> FROM country c
"> JOIN countrylanguage l
"> ON c.Code=l.CountryCode
"> WHERE l.Language='Swedish'
"> ");
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT mle_session_state('stdout')\G
*************************** 1. row ***************************
mle_session_state('stdout'): Name,LocalName,Population,Language
Denmark,Danmark,5330000,Swedish
Finland,Suomi,5171300,Swedish
Norway,Norge,4478500,Swedish
Sweden,Sverige,8861400,Swedish
1 row in set (0.00 sec)
单个简单语句返回的结果集不能大于 256 KB。