proc 编程执行 insert、delete、update语句

2023-10-20 18:26:29 浏览数 (2)

主题中提到的三种语句都是没有返回值的,所以我们实现起来也最简单,下面代码中包含了 insert、update 和 delete 三种语法的使用。值得注意的是在 insert 和 update 的时候使用宿主变量时的语法,在宿主变量前一定要加冒号,这是初学者最容易犯的错误。


代码实现

代码语言:javascript复制
#include <stdio.h>
#include <string.h>
#include “sqlca.h”
EXEC SQL BEGIN DECLARE SECTION;
char *serversid = "scott/tiger@orcl";

// 宿主变量
int deptno;
char dname[20];
char loc[10];
char newname[20];
char newloc[10];
EXEC SQL END DECLARE SECTION;
int main(int argc, char* argv[])
{
    int ret = 0;
// 连接 oracle 服务器
EXEC SQL CONNECT :serversid;
if (sqlca.sqlcode != 0)
{
    ret = sqlca.sqlcode;
    printf("connect oracle error... code = %d\n", ret);
    return ret;
}

// 插入数据
deptno = 60;
strcpy(dname, "dengjia");
strcpy(loc, "hello");
// 请注意插入数据时使用宿主变量的语法
EXEC SQL insert into dept(deptno, dname, loc) values(:deptno, :dname, :loc);
if (sqlca.sqlcode != 0)
{
    ret = sqlca.sqlcode;
    printf("insert into error... code = %d\n", ret);
    return ret;
}

// 更新数据
strcpy(newname, "mynewname");
strcpy(newloc, "mynewloc");
// update 数据时使用宿主变量的语法,更新 deptno 为 60 的数据
EXEC SQL update dept set dname = :newname, loc = :newloc where deptno = 60;
if (sqlca.sqlcode != 0)
{
    ret = sqlca.sqlcode;
    printf("update set error... code = %d\n", ret);
    return ret;
}
printf("update success...\n");
// 对上面执行的操作执行一次提交
EXEC SQL commit;

// 删除 dept 表中 deptno 为 50 的数据
EXEC SQL delete from dept where deptno = 50;
if (sqlca.sqlcode != 0)
{
    ret = sqlca.sqlcode;
    printf("delete from error... code = %d\n", ret);
    return ret;
}
printf("delete success...\n");
EXEC SQL commit release;
return 0;
}

代码编译

proc 预处理:proc insert.pc gcc 编译:gcc insert.c -o insert -I ORACLE_HOME/precomp/public -L ORACLE_HOME/lib -l clntsh

执行效果

表中的原有如下数据:

执行我们的程序(注意,在程序执行前,你要操作的数据必须都是真正提交到数据库中的,如果操作了未commit的数据,那么程序就会卡住不动):

执行后再次查看数据库:

多了一条 deptno = 60 的数据,而原来 deptno = 50 的数据被我们删除了。

0 人点赞