Pro*C 基本程序

本文通过一个具体的 Pro*C 示例程序,介绍了如何使用 Pro*C 进行数据库操作,包括创建表、插入数据、查询数据等基本操作,并展示了如何处理 SQL 错误。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>

void sql_error();

struct info         /*结构体*/
{
    int id;
    char name[20];   
    char sex[6];
    char tel[12];
};

struct info_ind    /* 指示器变量*/
{
    short id_ind;
    short name_ind;
    short sex_ind;
    short tel_ind;
};

int main(int argc,char * argv[])
{

    char * user="admin";             /*数据库用户名*/
    char * passwd="admin";       /*数据库密码*/
    int id=0;              /*宿主变量*/     
    char strname[20];      
    char strsex[4];
    char strtel[11];
    struct info myinfo;
    struct info_ind ind;

    EXEC SQL WHENEVER SQLERROR DO sql_error();
    EXEC SQL connect :user identified by :passwd;   /*连接数据库*/
    if (sqlca.sqlcode == 0)
    printf("connect sucess/n");
    else
    printf("connect fail/n");
    EXEC SQL drop table student;  /*如果有该表则先干掉,再创表*/
    EXEC SQL create table student(stuid int not null,stuname varchar(20) not null,stusex varchar(4),stutel char(11));      /*创表*/

    EXEC SQL insert into student values(1,'feng','boy','12589894789');  /*插入数据*/
    EXEC SQL insert into student values(2,'wang','girl','07245689145');
    EXEC SQL INSERT INTO student VALUES(3,'long','boy','13122514899');
    EXEC SQL insert into student values(4,'xiong','girl','13838383388');
    EXEC SQL insert into student values(5,'zhang','boy','15858568945');
    while (1)
    {
        printf("please input the id:");
        fscanf(stdin,"%d",&id);
       /*EXEC SQL select stuname,stusex,stutel into :strname ,:strsex,:strtel from student where stuid=:id;   */   /*可以单个插*/
        EXEC SQL select stuid,stuname,stusex,stutel into :myinfo indicator :ind from student where stuid =:id;  /*可以插入到一个结构体*/
    printf("/nthe infomation:%s/n",myinfo.name);
    printf("%s/n",myinfo.sex);
    printf("%s/n",myinfo.tel);
    }
    EXEC SQL commit work release;      /*提交*/
    return 0;
}

void sql_error()
{
    printf("oracle error/n");
    char buf[100];
    int buflen,msglen=0;
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK RELEASE;
    buflen=sizeof(buf);
    sqlglm(buf,&buflen,&msglen);
    printf("%*,s/n",msglen,buf);
    exit(1);
}

关于pro*c文件的注释 ,建议用/*  */ ,若要用 //,据说要在 proc 命令行参数后知道 CODE =CPP ,但我试用时,好像不需要,但还是按

标准用 /**/ 来注释吧。

 

关于 EXEC SQL ***** 的返回值 为 sqlca.sqlcode  ,若返回值为0,则该句执行成功,否则不成功

编译:

可以写成 Makefile 也可以写成 shell

我写的shell

myproc.sh:

 

in=ch2.pc    //修改成你的pro*c 文件
out=ch2.c   //修改成你要生成的c文件

proc iname=$in oname=$out

cc -I${ORACLE_HOME}/precomp/public $out -o app -L${ORACLE_HOME}/lib –lclntsh

然后运行该shell

再运行生成的 app 可执行文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值