c++ - Oracle 中触发 SQL 查询的底层机制

标签 c++ sql c oracle

当我们触发像

这样的 SQL 查询时

ORACLE 下的 SELECT * FROM SOME_TABLE_NAME

内部到底发生了什么?有解析器在工作吗?是用C/C++写的吗?

任何人都可以解释一下吗?

提前感谢大家。

最佳答案

简短的回答是肯定的,当然Oracle内部有一个解析器模块来解释语句文本。我的理解是 Oracle 的大部分源代码都是用 C 语言编写的。

一般引用:

当 Oracle 被要求执行任何 SQL 语句时,它可能会经历三个步骤。通常,控制权会在每个步骤之间返回给客户端,尽管详细信息可能取决于所使用的特定客户端以及进行调用的方式。

(1) 解析——我相信第一个操作实际上是检查 Oracle 是否拥有准确语句文本的缓存拷贝。如果是这样,它可以节省再次解析你的语句的工作。如果没有,它当然必须解析文本,然后确定 Oracle 认为最适合该语句的执行计划。因此从概念上讲,此阶段至少有两个实体在工作 - 解析器和优化器。

(2) 执行——对于 SELECT 语句,此步骤通常只运行足够的执行计划,以便准备好将一些行返回给客户端。根据计划的细节,这可能意味着运行整个事情,也可能意味着只做一小部分工作。对于任何其他类型的语句,执行阶段是所有工作实际完成的时候。

(3) 获取——这是实际将行返回给客户端的时间。通常,客户端具有预定的获取数组大小,该大小设置单个获取调用将返回的最大行数。因此,单个语句可能会进行多次提取。当然,如果该语句无法返回行,则不需要提取步骤。

关于c++ - Oracle 中触发 SQL 查询的底层机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722004/

相关文章:

c++ - 无需等待缓冲区的 Win32 ReadFile 输出

sql - 删除语句锁定表

c - struct name 是一个指针吗?

c - 大小 8 valgrind 的无效写入

c - 使用 C 从路由器转储闪存

c++ - 让 Kinect SDK 在 C++ 中与 visual studio 2010 一起工作

c++ - 在 C/C++ 项目中查找 "undefined"引用

c++ - std::reference_wrapper 中的 Visual C++ 10.0 错误?

sql - 创建在不同搜索条件上具有不同 WHERE 子句的存储过程,而不将所有内容放入长字符串中

sql - JOIN 性能与循环选择