静态或嵌入式SQL 是应用程序中的 SQL 语句,在运行时不会更改,因此可以硬编码到应用程序中。动态SQL 是在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。
动态SQL 是一种编程技术,使您能够在运行时动态构建 SQL 语句。您可以使用动态 SQL 创建更通用、更灵活的应用程序,因为 SQL 语句的全文在编译时可能是未知的。
使用静态 SQL 的好处是优化了语句,从而使应用程序具有高性能,因为它提供了比动态 SQL 更好的灵活性,并且由于动态语句的访问计划是在运行时生成的,因此必须在应用程序,这是你永远不会在静态 SQL 中看到的东西,但这并不是它们之间的唯一区别,所以我们可以说动态 SQL 比静态语句只有一个优点,一旦应用程序就可以清楚地注意到编辑或升级,因此对于动态语句,只要在运行时生成访问计划,就不需要预编译或重新构建,而静态语句需要在修改后重新生成访问计划,此外动态SQL需要更多的权限,也可能是执行未经授权的代码的方式,我们不知道是什么样的用户,我们将有,所以为了安全也可以是如果程序危险梅尔没有处理它。
下面提到的是静态或嵌入式与动态或交互式SQL 之间的基本区别:
Static (Embedded) SQL | Dynamic (Interactive) SQL |
---|---|
In Static SQL, how database will be accessed is predetermined in the embedded SQL statement. | In Dynamic SQL, how database will be accessed is determined at run time. |
It is more swift and efficient. | It is less swift and efficient. |
SQL statements are compiled at compile time. | SQL statements are compiled at run time. |
Parsing, Validation, Optimization and Generation of application plan are done at compile time. | Parsing, Validation, Optimization and Generation of application plan are done at run time. |
It is generally used for situations where data is distributed uniformly. | It is generally used for situations where data is distributed non uniformly. |
EXECUTE IMMEDIATE, EXECUTE and PREPARE statements are not used. | EXECUTE IMMEDIATE, EXECUTE and PREPARE statements are used. |
It is less flexible. | It is more flexible. |
动态 SQL 的限制:
我们不能动态使用某些 SQL 语句。
与静态 SQL 相比,这些语句的性能较差。
静态 SQL 的限制:
它们在运行时不会改变,因此被硬编码到应用程序中。