文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


27.3.7.1 简单语句

简单语句返回一个结果集,可用于访问数据(行)、元数据和诊断信息。

简单语句是静态的,在创建后无法修改;换句话说,它无法参数化。包含一个或多个 ? 参数标记的简单语句会引发错误。有关允许在执行时指定参数的任意值的预处理语句的信息,请参见 第 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。