前言
主要介绍基本的CRUD操作语句以及相关知识点。
数据插入
使用嵌入式INSERT语句一次插入一行或多行记录
一行记录
EXEC SQL INSERT INTO TALBE_NAME (XXX,XXX,XXX) VALUE (:xxx,:xxx,:xxx);
多行记录
EXEC SQL BEGIN DECLARE SECTION;
char aaa[100][20];
float bbb[100];
int insert_rows;
EXEC SQL END DECLARE SECTION;
insert_rows=50;
EXEC SQL INSERT FOR :insert_rows
INSERT INTO TABLE_NAME(AAA,BBB)
VALUES (:aaa,:bbb);
几点说明
- 往一张表中插记录,首先需要保证登录的用户有执行权限;
- FOR子句用于设置处理的数组元素数量,适用于INSERT,UPDATE,DELETE操作。FOR之后的一定需要是SQL宿主变量,而不可以为C语言的常量与字面值;
- 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次INSERT语句。
- WHERE子句中的数组大小可以不同,在这种情况下:
- 没有FOR子句时,由较小的数组维数决定;
- 有FOR子句时,由其后的数组变量决定。
数据更新
使用嵌入式UPDATE语句更新数据库中的记录信息
更新一条记录
EXEC SQL UPDATE TABLE_NAME
SET AAA=:aaa
WHERE BBB=:bbb
更新一组记录
char bbb[10][20];
float aaa;
EXEC SQL UPDATE TABLE_NAME
SET XXX=:aaa WHERE BBB=:bbb
几点说明
- 执行更新时,必须有执行权限
- 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次UPDATE语句。
- WHERE子句中的数组大小可以不同,在这种情况下:
- 没有FOR子句时,由较小的数组维数决定;
- 有FOR子句时,由其后的数组变量决定。
- 累计修改的行数在SQLCA的SQLERRD[2]中返回
- 如果没有满足条件的记录被更新,则返回错误信息
数据删除
使用嵌入式DELETE语句,删除数据库中的记录信息
简单删除
EXEC SQL DELETE FROM TABLE NAME WHERE XXX=:xxx;
光标删除
/*声明游标*/
EXEC SQL DECLARE tmp_cursor for SELECT ….
/*打开当前游标*/
EXEC SQL OPEN tmp_cursor ;
/*执行FETCH 动作*/
EXEC SQL FETCH tmp_cursor INTO:xxx,:yyy;
EXEC SQL DELETE FROM TABLE_NAME
WHERE CURRENT OF tmp_cursor;
使用数组删除
int number[10];
EXEC SQL DELETE FROM TABLE_NAME WHERE XXX=:xxx;
几点说明
- 首先需要拥有相应表的删除权限
- 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次DELETE语句。
- WHERE子句中的数组大小可以不同,在这种情况下:
- 没有FOR子句时,由较小的数组维数决定;
- 有FOR子句时,由其后的数组变量决定。
- 如果没有满足DELETE的条件的行被删除,则返回"NOT FOUND"错误码
- SQLCA中的SQLERRD[2]返回删除的累计行数。