静态SQL 和动态SQL 的区别
静态SQL(或嵌入式SQL) 是应用程序中的 SQL 语句,它们在运行时不会更改,因此可以硬编码到应用程序中。动态 SQL 是在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。
动态SQL 是一种编程技术,使开发人员能够在运行时动态构建 SQL 语句。可以使用动态 SQL 创建更通用、更灵活的应用程序,因为 SQL 语句的全文在编译时可能是未知的。
使用静态 SQL 的一个好处是优化语句,从而使应用程序具有高性能,因为它提供了比动态 SQL 更好的灵活性,并且由于动态语句的访问计划是在运行时生成的,因此它们必须在应用程序,这是你永远不会在静态 SQL 中看到的东西,但这并不是它们之间唯一的区别,所以我们可以说动态 SQL 与静态语句相比只有一个优势,一旦应用程序运行,就可以清楚地注意到这一点。编辑或升级,因此使用动态语句,只要在运行时生成访问计划,就不需要预编译或重新构建,而静态语句如果修改了访问计划,则需要重新生成访问计划,除此之外动态 SQL 需要更多权限,它也可能是执行未经授权代码的一种方式,我们不知道用户会提交什么样的数据,所以为了安全,如果程序没有处理提交的数据,那么可能会很危险。
下面提到的是静态或嵌入式与动态或交互式 SQL 之间的基本区别:
静态(嵌入式)SQL | 动态(交互式)SQL |
---|---|
在静态 SQL 中,如何访问数据库是在嵌入式 SQL 语句中预先确定的。 | 在动态 SQL 中,如何访问数据库是在运行时确定的。 |
它更加迅速和高效。 | 它不那么迅速和高效。 |
SQL 语句是在编译时编译的。 | SQL 语句在运行时编译。 |
应用程序计划的解析、验证、优化和生成在编译时完成。 | 应用程序计划的解析、验证、优化和生成在运行时完成。 |
一般用于数据分布均匀的情况。 | 它通常用于数据分布不均匀的情况。 |
不使用 EXECUTE IMMEDIATE 、 EXECUTE 和 PREPARE 语句。 |
使用 EXECUTE IMMEDIATE 、 EXECUTE 和 PREPARE 语句。 |
它不太灵活。 | 它更灵活。 |