本节讨论了在执行、获取和处理简单 SQL 语句和预处理语句的结果方面 API 的使用。JavaScript 中的 SQL 执行仅在存储过程中可用,在存储函数中不可用。
SQL API 支持两种类型的语句:简单 SQL 语句(参见 第 27.3.7.1 节,“简单语句”)和预处理语句(参见 第 27.3.7.2 节,“预处理语句”)。预处理语句支持绑定参数;简单语句不支持。
在给定会话中,可以为存储过程执行并发打开的最大简单语句数量为 16382。此数量是固定的,用户无法配置。尝试同时执行超过此数量的简单语句会导致错误。在 JavaScript 中执行的预处理语句将计入由 max_prepared_stmt_count
确定的全局限制;有关更多信息,请参见此变量的描述。
SQL 语句返回的结果集在内存中缓冲。对于简单语句,结果集(整体)的大小限制为 256 KB;对于预处理语句,任何单行最多可以使用 256 KB。在任何情况下,超过限制都会引发错误。
无论语句类型如何,都提供两种机制来使用结果。结果集可以在 JavaScript 内部处理,也可以直接传递给客户端。有关更多信息,请参见 结果集。
您还可以访问会话数据,例如临时表、会话变量和事务状态。在存储过程之外声明的会话变量可以在存储过程内部访问;临时表也是如此。此外,可以在存储过程内部提交在存储过程之外启动的事务。
产生包含不受支持数据类型的结果集的语句会导致不支持的类型错误。例如,涉及 DESCRIBE
、EXPLAIN
或 ANALYZE TABLE
的语句会受到此限制的影响,如下所示
mysql> CALL jssp_simple("DESCRIBE t1");
ERROR 6113 (HY000): JavaScript> Unsupported type BLOB/TEXT for 'Type'
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------+
| Error | 6113 | JavaScript> Unsupported type BLOB/TEXT for 'Type' |
+-------+------+---------------------------------------------------+
1 row in set (0.00 sec)
不支持从存储过程内部的 SQL 语句设置 JavaScript 局部变量。
API 还支持多个结果集,例如在某个存储过程调用另一个存储过程时产生。不支持多语句查询,会导致语法错误。
本节中的某些示例基于 world
示例数据库,该数据库可从 MySQL 网站 获得。有关从下载文件中安装数据库的帮助,请参见 第 6.5.1.5 节,“从文本文件执行 SQL 语句”。