许多人在使用数据库,但他们实际上并不了解静态 SQL 和动态 SQL 之间的区别。它们的目的是获取查询的输出,无论是静态的还是动态的。在本文中,您将通过详细讨论了解静态与动态 SQL 查询、SQL 语句的处理方式、动态 DBMS(数据库管理系统)、静态与动态报告以及应用程序的嵌入式 SQL 示例。
什么是嵌入式 SQL?
嵌入式或静态 SQL 查询是那些在执行或运行时不会更改并且可以硬编码(其中数据或参数不能更改)到不同应用程序中的指令。
嵌入式 SQL 应用程序
考虑一个嵌入式应用程序的示例,其中语句主要嵌入在 C++ 源文件中,其中预处理器将语句转换为对运行时库的调用。它可移植到其他环境,并为每个操作环境提供相同的功能。
嵌入式 SQL 应用程序由 SQL 语句组成,这些语句在编译之前被转换为 C 或 C++ 代码。如图所示,运行时的应用程序使用 SAP IQ 接口库,该库称为 DBLIB,用于与数据库服务器进行通信。DBLIB 是一个动态链接库 (DLL),可以在所有主要平台上共享。
什么是动态 SQL?
顾名思义,它是一种允许专业人员构建可在运行时动态更改的 SQL 语句的技术。动态查询是可以在执行或运行时构造的语句;例如,应用程序可能允许用户在执行时运行他们自己的查询。
什么是动态数据库管理系统?
动态 DBMS 是一个具有“基于值”的对象关系的数据库,它在检索时指定,并且在检索期间发现相关记录的位置。
下列关于静态和动态报表的说法不准确的是?
打印的销售分析是动态报告的一个例子,是关于静态和动态报告的错误陈述。以下关于报告的陈述属实:
- 静态报告作为 PDF 文档或在创建时固定的商业智能 (BI) 文档发布,因此这些报告不会被修改。
- 发布动态报表需要商业智能 (BI) 应用程序在交付给用户时访问数据源。
- 永远记住,印刷销售分析是静态报告的一个例子。
- 动态报告是商业智能 (BI) 文档,并在用户请求此文件时更新。
SQL 语句是如何处理的?
在继续下一步之前,有必要了解结构化查询语言语句是如何处理的。
1.解析语句
例如,用户想要运行以下查询:
选择 P、Q、R
从甲,乙
其中 P> 800
和 R = 'XYZ'
DBMS 会将查询解析为单个单词,称为标记,以确保语句没有拼写错误和语法错误。这将很快完成,因为在解析语句时无需访问数据库。
2. 验证声明
数据库管理系统将检查表(在我们的示例表 A 和 B 的情况下)是否存在于数据库(系统目录)中?用户是否有权运行这些语句?DBMS 验证列名没有歧义并且存在。
3.优化语句
DBMS 通过探索不同的方式来优化语句。可以使用索引(主键)来加快搜索速度吗?数据库管理系统应该先对第一个表应用搜索条件,然后将其连接到第二个表,还是应该从连接开始,然后使用条件?在探索了所有可能的条件之后,DBMS 会选择一个更合适的。它可能会为同一个查询探索数千种可能的不同方式,因此它是一个 CPU 密集型过程。
4.访问计划或二进制形式
在此步骤中,将生成 SQL 语句的访问计划或二进制形式。
5. 访问计划的执行
在最后一步,将执行访问计划。
嵌入式 SQL 和动态 SQL 之间的基本区别
静止的 | 动态的 |
---|---|
在静态或嵌入式 SQL 中,如何访问数据库是在嵌入式 SQL 语句中预先确定的,并由预处理器执行,用户无法在运行时运行查询。 | 如何访问数据库是在运行时确定的,用户还可以在运行时运行结构化查询语言指令。 |
它更快捷、更高效。 | 它不那么迅速和高效。 |
所有数据库查询都是在编译时编译的。 | 所有数据库查询都是在应用程序运行时编译的。 |
包括解析、验证、优化和生成应用程序访问计划在内的所有过程都在编译时完成。 | 所有过程,包括解析、验证、优化和生成应用程序访问计划(SQL 查询的二进制形式)都在运行时完成。 |
它主要用于数据分布一致的情况。 | 它用于数据分布不均匀的情况。 |
不使用 PREPARE、EXECUTE 和 EXECUTE IMMEDIATE 语句。 | 使用 PREPARE、EXECUTE 和 EXECUTE IMMEDIATE 语句。 |
由于硬编码到应用程序中,它不太灵活。 | 我们可以在运行时运行我们的 SQL 语句,因此更加灵活。 |