数据库-嵌入SQL访问接口

嵌入式SQL(Embedded SQL) 是一种将SQL语句直接写入某些高级程序语言,如C、 COBOL、Java、Ada等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数 据以及处理数据的能力。

在SQL86规范中定义了对于COBOL、FORTRAN、PI/L等语言的嵌入式SQL的规范。在SQL89规范中,定义了对于C 语言的嵌入式SQL的规范。一些大型的数据库厂商发布的数据 库产品中,都提供了对于嵌入式SQL的支持,如Oracle、DB2等。

在这一方法中,将SQL文嵌入的目标源码的语言称为宿主语言。

提供对于嵌入式SQL的支持,需要数据库厂商除了提供DBMS之外,还必须提供一些工 具。为了实现对于嵌入式SQL的支持,技术上必须解决以下问题。

(1)宿主语言的编译器不能识别和接受SQL程序,需要解决如何将SQL的宿主语言源代 码编译成可执行码。

(2)宿主语言的应用程序如何与DBMS之间传递数据和消息。

(3)如何把对数据的查询结果逐次赋值给宿主语言程序中的变量,以供其处理。

(4)数据库的数据类型与宿主语言的数据类型有时不完全对应或等价,如何解决必要的数 据类型转换问题。

为了解决上述这些问题,数据库厂商需要提供一个嵌入式SQL的预编译器,把包含有嵌入 式SQL的宿主语言源码转换成纯宿主语言的代码。这样一来,源码即可使用宿主语言对应的编 译器进行编译。通常情况下,经过嵌入式SQL的预编译之后,原有的嵌入式SQL会被转换成 一系列函数调用。因此,数据库厂商还需要提供一系列函数库,以确保链接器能够把代码中的 函数调用与对应的实现链接起来。

嵌入式SQL中除了可以执行标准SQL程序之外,为了对应嵌入的需要,还增加了一些额 外的语法成分。主要包括宿主变量使用声明、数据库访问、事务控制、游标操作的语法等。

相关推荐
廿一夏14 分钟前
MySql存储引擎与索引
数据库·sql·mysql
Mahir0815 分钟前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit1 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码2 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事2 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海2 小时前
C# 隐式转换深度解析
java·开发语言·c#
lzhdim2 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室3 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
一只大袋鼠3 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
TDengine (老段)3 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据