当前位置: 首页 > news >正文

嵌入式SQL开发

        嵌入式sql是将sql语句嵌入到程序设计语言中,被嵌入的程序设计语言,如C、C++,JAVA,称为宿主语言,简称为主语言。

一:嵌入式sql如何转化为可识别的编译程序

 二:格式

为了区分sql语句和主语言语句,所有的sql语句都要加上EXEC SQL

C:

EXEC SQL <SQL语句>;

 三:通信控制

(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区实现。

(2)主语言向SQL语句提供参数,主要用变量实现。

(3)将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。

以下分别介绍上述三种方法:

1. SQL通信区(SQLCA )

SQLCA 是一个数据结构,用途?

(1)SQL语句执行后,系统反馈给应用程序信息

         描述系统当前工作状态

         描述运行环境

(2)这些信息将送到SQL通信区中

(3)应用程序从SQL通信区中取出这些状态信息,据此决定接下来执行的语句

使用方法:

  • 定义SQLCA
EXEC SQL INCLUDE SQLCA
  • 使用SQLCA

1. SQL中有一个存放每次执行SQL语句后返回代码的变量 SQLCODE

2. 如果SQLCODE等于预定义的常量SUCCESS,表示语句成功!否则出错!

3。 应用程序每执行完一条SQL语句后都应该测试一下SQLCODE,以了解该SQL语句执行情况并做相应处理

 2. 主变量和指示变量

1. 主变量:

(1). 嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据

(2). 在SQL语句中使用的与程序的变量简称为主变量

类型划分:

输入主变量:由应用程序对其赋值,SQL语句引用

输出主变量:由SQL语句对其赋值或设置状态信息,返回给应用程序 

2. 指示变量:(理解为一种标志位)

 (1)指示变量是一个整型变量,用来“指示”所指比主变量的值或条件

 (2)一个主变量可以附带一个指示变量

用途:

1. 指示输入主变量是否为空值

2. 检测输出变量是否为空值,值是否被截断 

 3. 变量使用

定义方法:

EXEC SQL BEGAIN DECLARE SECTION

...
...
... (用来说明主变量和指示变量)

EXEC SQL END DECALRE SECTION

 使用方法:

主变量:

1. 使用在任何一个能够使用表达式的SQL语句上

2. 变量名前加冒号(:)作为区分

指示变量:

1. 变量名前加冒号(:)作为区分

2. 紧跟所指主变量之后 

注:SQL语句之外,随便用,不用加冒号 

  3. 游标的使用

为什么要使用游标?

 什么是游标?

1. 游标是系统为用户开设的一个数据缓冲区,存放SQL的执行结果

2. 每个游标区的都有一个名字

3. 用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交给主语言进一步处理

 不用游标的语句:

 使用方法:

打开游标
EXEC SQL OPEN <游标名>
说明:1. 打开游标实际上是执行相应的SELECT语句,把查询结果取到缓冲区中
     2. 这时游标处于活动状态,指标指向查询结果集中的第一条记录

使用FETCH语句推进游标的指针
EXEC SQL FETCH <游标名>
        into <主变量>[<指示变量>]
              [<主变量>[<指示变量>]]...;
功能:
     指定方向推动游标指针,同时将缓冲区中的当前记录取出来送至主变量供主语言进一步处理

   4. 动态SQL

主变量为SQL语句的内容,不是原来保存数据的输入或输出变量

SQL语句主变量在程序执行期间可以设定不同的SQL语句,然后立即执行

使用:

使用动态参数的步骤
(1)声明SQL语句主变量
(2)准备SQL语句(PREPARE)
    EXEC SQL PREPARE<语句名>
        from<SQL语句主变量>

相关文章:

  • 对于HTTP协议,什么是长连接和短连接?
  • ReentrantLock读写锁
  • leetcode 1680. Concatenation of Consecutive Binary Numbers(连接连续的二进制数)
  • Python数据分析之时间序列的处理
  • 【PHP】如何搭建服务器环境 原生篇 | Ubuntu 18.04 + PHP8.1 + MySQL5.7 + Nginx 1.4
  • 【c语言】数据在内存中的存储
  • 数据结构考试必须要掌握的重点知识
  • 进程管理4——进程优先级
  • 外网访问内网80端口【内网穿透】
  • Android性能优化技术,在大厂中为何这么看重?进大厂必学好
  • 基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程
  • 水平分表之基因法
  • Gorm笔记
  • 抽空做了个“胃肠镜”,唠唠嗑
  • 现在工作是不是很难找?
  • [PHP内核探索]PHP中的哈希表
  • CentOS 7 修改主机名
  • C语言笔记(第一章:C语言编程)
  • emacs初体验
  • Java精华积累:初学者都应该搞懂的问题
  • Making An Indicator With Pure CSS
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP 7 修改了什么呢 -- 2
  • V4L2视频输入框架概述
  • windows下使用nginx调试简介
  • 计算机常识 - 收藏集 - 掘金
  • 理解在java “”i=i++;”所发生的事情
  • 消息队列系列二(IOT中消息队列的应用)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • # 数据结构
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (175)FPGA门控时钟技术
  • (4)(4.6) Triducer
  • (C++)八皇后问题
  • (vue)页面文件上传获取:action地址
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (六)软件测试分工
  • (一) storm的集群安装与配置
  • (一)Java算法:二分查找
  • (原)本想说脏话,奈何已放下
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net - 类的介绍
  • .net core 6 集成和使用 mongodb
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net6 Api Swagger配置
  • .net中应用SQL缓存(实例使用)
  • // an array of int
  • @Data注解的作用
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [ASP]青辰网络考试管理系统NES X3.5