【数据库】第八章数据库编程知识点汇总

1、建立数据库连接
EXEC SQL CONNECT TO target[AS connection-name][USER user-name];
 target是要连接的数据库服务器
常见的服务器标识串,如
《dbname》@《hostname》:《port》
包含服务器标识的SQL串常量
 DEFAULT
关闭数据库连接
EXEC SQL DISCONNECT [connection];
例题:依次检查某个系的学生记录,交互式更新某些学生年龄。
EXEC SQL BEGIN DECLARE SECTION; /主变量说明开始/
char Deptname[20];
char Hsno[9];
char Hsname[20];
char Hssex[2];
int HSage;
int NEWAGE;
EXEC SQL END DECLARE SECTION; /主变量说明结束/
long SQLCODE;
EXEC SQL INCLUDE SQLCA; /定义SQL通信区/

int main(void) /*C语言主程序开始*/
{
    int count = 0;
    char yn; /*变量yn代表yes或no*/
    printf("Please choose the department name(CS/MA/IS): "); 
    scanf("%s",deptname); /*为主变量deptname赋值*/
    EXEC SQL CONNECT TO TEST@localhost:54321 USER
    "SYSTEM"/"MANAGER"; /*连接数据库TEST*/
    EXEC SQL DECLARE SX CURSOR FOR /*定义游标SX*/
    SELECT Sno,Sname,Ssex,Sage /*SX对应的语句*/
    FROM Student
    WHERE SDept = :deptname;
    EXEC SQL OPEN SX; /*打开游标SX,指向查询结果的第一行*/
    for ( ; ; ) /*用循环结构逐条处理结果集中的记录*/
    { 
        EXEC SQL FETCH SX INTO :HSno,:Hsname,:HSsex,:HSage;
        /*推进游标,将当前数据放入主变量*/
        if (SQLCA.SQLCODE!= 0) /*SQLCODE != 0,表示操作不成功*/
            break; /*利用SQLCA中的状态信息决定何时退出循环*/
        if(count++ == 0) /*如果是第一行的话,先打出行头*/
            printf("\n%-10s %-20s %-10s %-10s\n","Sno“,"Sname“,"Ssex", "Sage");
        printf("%-10s %-20s %-10s %-10d\n“,HSno,Hsname,Hssex,HSage); /*打印查询结果*/
        printf(“UPDATE AGE(y/n)?”); /*询问用户是否要更新该学生的年龄*/
        do{scanf("%c",&yn);}
        while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');
        if (yn == 'y' || yn == 'Y') /*如果选择更新操作*/
        {
            printf("INPUT NEW AGE:");
            scanf("%d",&NEWAGE); /*用户输入新年龄到主变量中*/
            EXEC SQL UPDATE Student /*嵌入式SQL更新语句*/
            SET Sage = :NEWAGE
            WHERE CURRENT OF SX;
         } /*对当前游标指向的学生年龄进行更新*/
    }
    EXEC SQL CLOSE SX; /*关闭游标SX,不再和查询结果对应*/
    EXEC SQL COMMIT WORK; /*提交更新*/
    EXEC SQL DISCONNECT TEST; /*断开数据库连接*/
}

2、根据学生号码查询学生信息。
EXEC SQL SELECT Sno,Sname,Ssex,Sage,Sdept
INTO:Hsno,:Hname,:Hsex,:Hage,:Hdept
FROM Student
WHERE Sno=:givensno;
/把要查询的学生的学号赋给为了主变量givensno/
3、修改某个学生选修1号课程的成绩。
EXEC SQL UPDATE SC
SET Grade=:newgrade
/修改的成绩已赋给主变量:newgrade/
WHERE Sno=:givensno;
/学号赋给主变量:givensno/
4、必须使用游标的SQL语句
 查询结果为多条记录的SELECT语句
 CURRENT形式的UPDATE语句
 CURRENT形式的DELETE语句
5、说明游标的语句格式
EXEC SQL DECLARE <游标名> CURSOR
FOR <SELECT语句>;
打开:EXEC SQL OPEN <游标名>;
推进:EXEC SQL FETCH <游标名>
INTO <主变量>[<指示变量>]
[,<主变量>[<指示变量>]]…;
关闭:EXEC SQL CLOSE <游标名>;
6、条件控制语句: IF-THEN,IF-THEN-ELSE和嵌套的IF语句
(1)IF condition THEN
Sequence_of_statements;
END IF;
(2)IF condition THEN
Sequence_of_statements1;
ELSE
Sequence_of_statements2;
END IF;
(3)在THEN和ELSE子句中还可以再包含IF语句,即IF语句可以嵌套
7、循环控制语句
LOOP,WHILE-LOOP和FOR-LOOP
(1)简单的循环语句LOOP
LOOP
Sequence_of_statements;
END LOOP;
(2)WHILE-LOOP
WHILE condition LOOP
Sequence_of_statements;
END LOOP;
(3)FOR-LOOP
FOR count IN [REVERSE] bound1 … bound2 LOOP
Sequence_of_statements;
END LOOP;
8、利用存储过程来实现下面的应用:从账户1转指定数额的款项到账户2中。
CREATE OR REPLACE PROCEDURE
TRANSFER(inAccount INT,outAccount INT,amount FLOAT)
/定义存储过程TRANSFER,其参数为转入账户、转出账户、转账额度/
AS DECLARE /定义变量/
totalDepositOut Float;
totalDepositIn Float;
inAccountnum INT;
BEGIN /*检查转出账户的余额 /
SELECT Total INTO totalDepositOut FROM Accout
WHERE accountnum=outAccount;
IF totalDepositOut IS NULL THEN
/如果转出账户不存在或账户中没有存款/
ROLLBACK; /回滚事务/
RETURN;
END IF;
IF totalDeposit Out< amount THEN /如果账户存款不足/
ROLLBACK; /回滚事务/
RETURN;
END IF;
SELECT Accountnum INTO inAccountnum FROM Account
WHERE accountnum=inAccount;
IF inAccount IS NULL THEN /如果转入账户不存在/
ROLLBACK; /回滚事务/
RETURN;
ENDIF;
UPDATE Account SET total=total-amount
WHERE accountnum=outAccount;
/
修改转出账户余额,减去转出额 /
UPDATE Account SET total=total + amount
WHERE accountnum=inAccount;
/
修改转入账户余额,增加转入额 /
COMMIT; /
提交转账事务 */
END;
应用:(1)从账户01003815868转10000元到01003813828账户中。
CALL PROCEDURE
TRANSFER(01003813828,01003815868,10000)
(2)修改存储过程
ALTER PROCEDURE 过程名1 RENAME TO 过程名2;
(3)删除存储过程
DROP PROCEDURE 过程名();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将本地项目上传到远程仓库的步骤

文章目录将本地项目上传到远程仓库的步骤1.进入想上传的项目文件夹2.初始化本地仓库3.添加该项目下的所有文件4.将文件添加到本地仓库中5.添加远程仓库6.将文件更新到远程仓库上7.将本地文件推送回到指定的远程仓库中将本地项目上传到远程仓库的步骤 1.进入想上传的项目文件夹…

简单介绍TensorFlow中关于tf.app.flags命令行参数解析模块

这篇文章主要介绍了TensorFlow中关于tf.app.flags命令行参数解析模块&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。如有错误或未考虑完全的地方&#xff0c;望不吝赐教 tf.app.flags命令行参数解析模块 说道命令行参数解析&#xff0c;就不得不提到 python…

Spring的IOC和DI入门

1、相关概念 1.1、Spring来源 官网&#xff1a;Spring | Home Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架。Spring核心是IOC和AOP。 Spring主要优点包括&#xff1a; 方便解耦&#xff0c;简化开发&#xff0c;通过Spring提供的IoC容器&#xff0c;我们可以将…

分布式事务问题

分布式事务问题 1、什么是分布式事务 一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据&#xff0c;这里存在分布式事务问题。 什么是分布式事务&#xff1f; 首先理解什么是本地事务&#xff1f; 平常我们在程序中通过spring去控制事务是利用数据库…

【C++】一维数组练习案例 - 五只小猪称体重

目录 1、缘起 2、案例描述 3、代码 4、总结 1、缘起 最近在黑马程序员 UP 主那里学习 C 编程语言&#xff0c;学习到了【第44节】一维数组练习案例 - 五只小猪称体重 知识点。找出五只小猪中最重的小猪&#xff0c;这不就是基本算法中的 "求最大值算法" 嘛。 为…

ChatGPT相关核心算法

ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。本文将分别介绍作为其实现基础的 Transformer 模型、激发出其所蕴含知识的Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与人类意图对齐的基于人类反馈的强化学习算法。 1.基于Transformer的预…

STM32F4_时钟系统精讲

目录 1. 什么是系统时钟 2. 时钟树 2.1 LSI 2.2 LSE 2.3 HSI 2.4 HSE 2.5 PLLCLK 2.6 SYSCLK 2.7 HCLK 2.8 PCLK1 2.9 PCLK2 2.10 RTC/AWU 3 SysTick定时器 3.1 为什么会有Systick定时器&#xff1f; 3.2 SysTick定时器的作用 3.3 SysTick定时器的寄存器 4.…

DAMA-CDGA/CDGP数据治理认证考试地点一般有哪些?

据目前数据统计&#xff0c;进行过DAMA-CDGA/CDGP数据治理认证考试的地区主要是一线城市及直辖市&#xff0c;主要有&#xff1a;北京、上海、广州、深圳、西安、杭州、成都、重庆、武汉、厦门、太原、甘肃、长沙等。&#xff08;*当所在城市报名人数达到25人以上方可增加考场开…

C++基本语法

C 程序可以定义为对象的集合&#xff0c;这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象&#xff0c;方法、即时变量。 对象 - 对象具有状态和行为。例如&#xff1a;一只狗的状态 - 颜色、名称、品种&#xff0c;行为 - 摇动、叫唤、吃。对象是类…

SpringBoot2基础入门 --- 了解自动配置原理

一、SpringBoot特点 1.1、依赖管理 父项目做依赖管理 依赖管理 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent>…

固定资产AFAB进行折旧选择页面的各个选项分别是什么意思?

固定资产AFAB进行折旧选择页面的“记账运行原因”的4个选项&#xff0c;及下面的各个选项分别是什么意思&#xff1f; 一、“记账运行原因”的4个选项&#xff1a; 1&#xff0c;计划内记账运行&#xff08;Planned posting run&#xff09;&#xff1a;上期折旧成功运行&…

测试---

1.加载测试专用属性 1.在启动测试环境时可以通过properties参数设置测试环境专用的属性 SpringBootTest(properties {"test.valuekllda"}) public class PropertiesTest {Value("${test.value}")private String msg; ​Testpublic void testPro(){System…

初识MQ——springCloud

目录 同步通讯 同步调用存在的问题 优点 异步通讯 优势 缺点 MQ常见框架 同步通讯 同步调用存在的问题 1、耦合度高 2、性能下降 3、资源浪费 4、级联失败 优点 时效性强 &#xff0c;可以立即得到结果 异步通讯 异步调用常见实现就是事件驱动模式 优势 1、解除耦合 2、…

【关于Linux中----多线程(一)】

文章目录认识线程创建线程线程优点和缺点创建一批线程终止线程线程的等待问题认识线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&a…

高通开发系列 - linux kernel内核升级msm-4.9升级至msm-4.19(1)

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 报错和警告问题中断警告的解决方案Unknown SOC ID问题解决方法msm-vidc panic错误系统时钟功能RPM功能调试共享内存smem调试之前移植过…

SpringCloud Alibaba Nacos

文章目录第一章 SpringCloud Alibaba1.1概述1.2 主要功能1.3 组件第二章 SpringCloud Alibaba Nacos服务注册与配置中心2.1 Nacos简介2.2 安装Nacos2.3 Nacos作为服务注册中心一、服务提供者二、服务消费者三、服务注册中心对比2.4 Nacos作为服务配置中心一、Nacos基础配置项目…

【C++笔试强训】第六天

选择题 1. 解析&#xff1a;十进制转换为八进制就是不断的除8&#xff0c;取余数。十进制转换成其他进制的数就是除以进制&#xff0c;取余。 解析&#xff1a;注意printf的转换&#xff0c;%%只会打印一个%&#xff0c;所以选A。 解析&#xff1a;由于()的原因p先和*结合&…

某面试官分享经验:看求职者第一眼,开口说第一句话,面试结果就差不多定了,准确率高达90%以上...

我们以前分享过许多经验&#xff0c;但大多是站在打工人的视角上&#xff0c;今天给大家带来一个面试官的经验&#xff1a;1. 看求职者第一眼&#xff0c;开口说第一句话&#xff0c;面试结果就差不多定了&#xff0c;准确率高达90%以上。2. 绝不考八股文&#xff0c;如果问技术…

docker安装MongoBD(超详细)

一、安装docker 推荐文章&#xff1a;https://blog.csdn.net/Sumuxi9797926/article/details/127313307?spm1001.2014.3001.5502 二、创建主机挂载配置目录 data目录存放mongodb数据库文件&#xff0c;删除重启容器不会丢失 mkdir -p /docker/mongodb/data && cd …

马云回国,首谈ChatGPT

马云今天回国了&#xff0c;这是一个备受关注的消息。 作为中国最具代表性的企业家之一&#xff0c;马云在过去的二十多年里&#xff0c;带领阿里巴巴从一个小小的创业公司&#xff0c;发展成为全球最大的电商平台之一&#xff0c;同时也推动了中国互联网行业的发展。 他的回…