什么是嵌入式SQL和动态SQL?SQL语句是如何处理的?

许多人在使用数据库,但他们实际上并不了解静态 SQL 和动态 SQL 之间的区别。它们的目的是获取查询的输出,无论是静态的还是动态的。在本文中,您将通过详细讨论了解静态与动态 SQL 查询、SQL 语句的处理方式、动态 DBMS(数据库管理系统)、静态与动态报告以及应用程序的嵌入式 SQL 示例。

什么是嵌入式SQL和动态SQL?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 语句,因此更加灵活。