欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Proc*C/C++入门之常用嵌入式SQL语句

程序员文章站 2022-06-24 22:58:31
事务控制语句 commit, rollback and savepoint. exec sql commit; exec sql commit work release; exec sql...

事务控制语句

commit, rollback and savepoint.
exec sql commit;
exec sql commit work release;
exec sql rollback work release;

数据定义语句(ddl)

create, alter, drop
exec sql creat table t1(cola int);
exec sql drop table t1;
exec sql alter table t1 add(faxno number);

注意:对象名, 列名不能用宿主变量.`

自动提交事务

alter: alter table emp add( faxno number );
analyze: analyze table 

数据操作语句(dml)

exec sql select …….;
exec sql insert …….;
exec sql update …….;
exec sql delete …….;

用单个变量操作单行单列

char ename[35];
int empno=20;
exec sql select emp_name into :ename from emp 
where emp_no=:empno;
cout<<“the name is “<< ename;

注意:

字符串长度定义
指示变量的运用

用多个变量操作单行多列

变量顺序与字段名一至

char v_name[31], char v_job[21];
float v_salary;
int empno=20;
exec sql select emp_name,job,salary
into :v_name,:v_job,:v_salary
from emp 
where emp_no=:empno;
cout<用结构(struct )操作单行多列

宿主结构是指包含多个宿主变量的c语言结构,以此可简化单行多列操作。

struct{
    int no;
    char    name[10];
    int salary;
}emp_record;

输入:
exec sql insert into emp(empno,ename,sal) values (:emp_record);
输出:
exec sql select empno,ename,sal into :emp_record where rownum=1;

注意:

1.可用结构pointer,但要分配空间。
2.结构成员的数据类型,顺序必须与sql语句一至。
3.不能用嵌套的结构。
4.不能用c联合(union)

struct{
    int no;
    char    name[10];
    int salary;
}*emp_record;
emp_record = (struct emp_record *)malloc(sizeof(struct emp_record ));
exec sql select empno,ename,sal into :emp_record
            where rownum=1;

用数组(array)操作多行多列

为了降低网络开销,提高程序性能。

数组和 insert 语句
int num[100]; float salary[100]; char name[100][25];
/** 在此为array赋值 **/
exec sql insert into emp(empno,ename,sal) values (:num, :name, :salary);
数组和 update / delete 语句
char name[100]; float salary[100];
…….. /** 在此为array赋值 **/
exec sql update emp set sal=:salary where ename=:name;
char name[100];
…….. /** 在此为array赋值 **/
exec sql delete from emp where ename=:name;
数组和 select 语句
char name[100][25];
exec sql select ename into :name from emp
        where dept_num=2;
for(int j=0;j

注意事项:

1.只有char 和 archar 可为二维数组。 2.如数组index不同,按最小操作。 3.在select语句的where子句中,不能用数组。 4.数组元素最大值:32767