Pro*C 基础教程-简化版_Vol5 基本增删改

前言

主要介绍基本的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);

 

几点说明

  1. 往一张表中插记录,首先需要保证登录的用户有执行权限;
  2. FOR子句用于设置处理的数组元素数量,适用于INSERT,UPDATE,DELETE操作。FOR之后的一定需要是SQL宿主变量,而不可以为C语言的常量与字面值;
  3. 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次INSERT语句。
  4. 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

 

几点说明

  1. 执行更新时,必须有执行权限
  2. 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次UPDATE语句。
  3. WHERE子句中的数组大小可以不同,在这种情况下:
    • 没有FOR子句时,由较小的数组维数决定;
    • 有FOR子句时,由其后的数组变量决定。
  4. 累计修改的行数在SQLCA的SQLERRD[2]中返回
  5. 如果没有满足条件的记录被更新,则返回错误信息

 

数据删除

使用嵌入式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;

 

几点说明

  1. 首先需要拥有相应表的删除权限
  2. 使用数组时,WHERE子句后要不全部是标量,要不全部为数组,二者不可以混用。如果为标量,则ORACLE执行一次,如果为数组,则ORACLE对每一组数组元素执行一次DELETE语句。
  3. WHERE子句中的数组大小可以不同,在这种情况下:
    • 没有FOR子句时,由较小的数组维数决定;
    • 有FOR子句时,由其后的数组变量决定。
  4. 如果没有满足DELETE的条件的行被删除,则返回"NOT FOUND"错误码
  5. SQLCA中的SQLERRD[2]返回删除的累计行数。 

你可能感兴趣的:(oracle,sql,C++,c,C#)