【问题标题】:Does any RDBMS provide the feature of prepared statements?是否有任何 RDBMS 提供预准备语句的功能?
【发布时间】:2018-06-13 17:18:35
【问题描述】:

我在 Java 中学习了 JDBC 中准备好的语句的概念。所以我认为prepared statement是JDBC中的一个概念,而不是RDBMS中的一个概念。

为了看看我的猜测是否正确,请问是否有任何主要的 RDBMS 在它们的类似 PL/PSM 的语言中提供准备语句的功能,例如 PL/SQL、PL/pgSQL、MySQL、Transact-SQL?

如果有任何这样的 RDBMS,是否以 SQL 或类似 PL/PSM 的语言提供准备好的语句,例如 PL/SQL、PL/pgSQL、MySQL、Transact-SQL?

我阅读了DIfference Between Stored Procedures and Prepared Statements..?,但我找不到提供prepared statements 的功能,虽然我认为prepared statement 是JDBC 中的一个概念,而不是RDBMS 中的一个概念,而存储过程只是RDBMS 中的一个概念。

【问题讨论】:

  • 至少 Oracle 和 Postgres 有服务器端准备好的语句。
  • 谢谢。你能指出他们的使用参考和例子吗?
  • PL/PSM, PL/PSQL, PL/pgSQL等跟prepared statements没有关系,它们是关于存储过程的(除了存储过程通常也可以准备和执行prepared statements) .对于一个以提问赢得大部分声誉的人来说,你在措辞好的和中肯的问题上非常糟糕。在任何情况下,准备好的语句都在 SQL 标准中定义(例如,参见 ISO-9075-2:2016,第 20.7 节 )。
  • 这与你的英语使用无关。您以令人困惑的方式混淆了多个概念,提出了多个问题并且高度不具体和模糊。在我看来,这些都是危险信号。

标签: sql jdbc prepared-statement rdbms


【解决方案1】:

每个符合 SQL 的 RDBMS 实现都应支持用于服务器端预准备语句的 API。我想不出一个不支持预准备语句的 RDBMS。

JDBC 有一个 PreparedStatement 类。每个品牌的 JDBC 驱动程序的实现都不同,但我使用的所有这些都只是委托给 RDBMS API。 JDBC 驱动程序向数据库服务器发送一个 SQL 查询字符串,该 SQL 可能包含参数占位符,例如 ?(某些品牌 — 如 Oracle — 支持命名参数)。

一些数据库实现提供了可用于执行预准备语句的包或函数,因此您可以在运行时在存储过程中创建查询。

一些数据库实现还支持可以作为查询调用的PREPAREEXECUTE 语句。这允许您在存储过程或 SQL 脚本中使用准备好的语句。

【讨论】:

  • 谢谢。根据您提供的链接,Oracle、SQL Server 和 MySQL 中的准备语句是从字符串创建的,因此似乎是动态 SQL。另一方面,准备好的语句不是从 PostgreSQL 和SQL 中的字符串创建的,那么它们是 PostgreSQL 和 SQL 中的动态 SQL 吗? PostgreSQL 中的预处理语句与 MySQL、SQL Server 和 Oracle 数据库中的预处理语句概念是否相同?
猜你喜欢
  • 2011-08-06
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多