oracle pro,oracle pro*c的一个简单例子

news/2024/11/8 15:08:18/

一、环境

创建例子用到的视图:

SQL> create view mysc as select sc.sno,sc.cno,sc.grade,student.sname,course.cname from sc,student,course where sc.sno=student.sno and sc.cno=course.cno;

二、代码

stu_query.pc

#include

#include

#include

#include

#include

void sql_error(msg)

char *msg;

{

char err_msg[512];

size_t buf_len, msg_len;

EXEC SQL WHENEVER SQLERROR CONTINUE;

printf("/n%s/n", msg);

/* Call sqlglm() to get the complete text of the

* error message.

*/

buf_len = sizeof (err_msg);

sqlglm(err_msg, &buf_len, &msg_len);

printf("%.*s/n", msg_len, err_msg);

EXEC SQL ROLLBACK RELEASE;

exit(EXIT_FAILURE);

}

/*定义宿主变量*/

EXEC SQL BEGIN DECLARE SECTION;

char *userid="mymotif";

char *passwd="wxwpxh";

char *sid="XE";

char sno[8];

char sname[10];

char cname[13];

float grade;

short dept;

short ind1;

char qstring[80];

EXEC SQL END DECLARE SECTION;

int main()

{

EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--");

EXEC SQL CONNECT :userid IDENTIFIED BY :passwd USING :sid;

if (sqlca.sqlcode == 0)

printf("连接成功\n\n");

else{

printf("连接失败,exit(0)");

getchar();

exit(0);

}

EXEC SQL DECLARE c2 CURSOR FOR

SELECT SNO,SNAME FROM STUDENT;

printf( "%-13s%-8s\n","学号","学生姓名");

printf( "%-13s%-8s\n","--------","------");

EXEC SQL OPEN c2;

do{

EXEC SQL FETCH c2 INTO :sno,:sname; /* :rk.3:erk. */

if (sqlca.sqlcode!= 0) break;

printf( "%-13s%-8s\n",sno, sname);

}while(1);

printf("查询学生成绩,请输入学生号:\n");

scanf("%7s",&sno);

strcpy(qstring,"SELECT sname,cname,grade FROM MYSC WHERE SNO=:sno");

EXEC SQL PREPARE q1 FROM :qstring;

EXEC SQL DECLARE c1 CURSOR FOR q1;

EXEC SQL OPEN c1 USING :sno;

printf( "%-13s%-15s%-6s\n", "学生姓名","课程名","成绩");

printf( "%-13s%-15s%-6s\n", "--------","----------", "-----");

do{

EXEC SQL FETCH c1 INTO :sname,:cname,:grade;

if(sqlca.sqlcode != 0) break;

printf( "%-13s%-15s%-6.2f\n", sname, cname, grade);

} while(1);

return 0;

}

Makefile:

TARGET = stu_query

SRCS = stu_query.c

OBJS = stu_query.o

COMMLIB = -lpthread -lclntsh

LINKER = $(CC)

RM = /bin/rm -f

PROC = proc

PROCFLAGS = code=ANSI_C ireclen=2048 oreclen=2048 parse=none include=/usr/include\

include=/usr/include/linux\

include=/usr/local/include

CFLAGS = -I$(ORACLE_HOME)/sdk/include\

-L$(ORACLE_HOME)/lib

.SUFFIXES: .o .c .pc

.c.o:

$(CC) -c $(CFLAGS) $<

.pc.c:

@echo "PROC ."

$(PROC) iname=$*.pc $(PROCFLAGS)

$(TARGET): $(SRCS) $(OBJS)

$(CC) -o $@ $(OBJS) $(CFLAGS) $(COMMLIB)

clean :

$(RM) *.lis $(SRCS) $(TARGET) $(OBJS) $(TARGET:%=%.c)

三、编译运行:

$ make

PROC .

proc iname=stu_query.pc code=ANSI_C ireclen=2048 oreclen=2048 parse=none include=/usr/include include=/usr/include/linux include=/usr/local/include

Pro*C/C++: Release 11.2.0.4.0 - Production on 星期日 7月 19 08:27:43 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

系统默认选项值取自于: /opt/ora11g/instantclient_11_2/precomp/admin/pcscfg.cfg

cc -c -I/opt/ora11g/instantclient_11_2/sdk/include -L/opt/ora11g/instantclient_11_2/lib stu_query.c

cc -o stu_query stu_query.o -I/opt/ora11g/instantclient_11_2/sdk/include -L/opt/ora11g/instantclient_11_2/lib -lpthread -lclntsh

$ ./stu_query

连接成功

学号 学生姓名

-------- ------

9302203 马志

9302303 马元

9309203 王海

9402203 金力

9402208 马娟

查询学生成绩,请输入学生号:

9302203

学生姓名 课程名 成绩

-------- ---------- -----

马志元 数学分析 98.00

马志元 数据库设 89.00

马志元 数据库原 99.00


http://www.ppmy.cn/news/432285.html

相关文章

手写-js节流(定时器+时间差两种方式)

官方解释&#xff1a;当持续触发事件时&#xff0c;保证一定时间段内只调用一次事件处理函数。 节流实现思路: 实现节流函数, 我们使用定时器是不方便管理的, 实现节流函数我们采用另一个思路 我们获取一个当前时间nowTime, 我们使用new Date().gettime()方法获取, 在设定一个…

Office-Word如何取消修订模式

# 审阅->接受->接受所有更改并停止修订

word去掉万恶的域代码

背景&#xff1a;写论文使用mathtype插入公式后&#xff0c;有时候会显示域代码更新 软件环境&#xff1a;mac os 10.14.6, word 16.45 解决过程&#xff1a;刚开始在域代码那里接受修订&#xff0c;然后重新打开word还是现实域代码&#xff0c;去网上找了教程(mac下&#xf…

写论文如何关闭修订模式

最近在修改论文&#xff0c;是在别人的论文上基础上修改的论文&#xff0c;文章上老有修订&#xff0c;老师让我关了&#xff0c;但是关了几次修订都关不掉 如图&#xff0c;点了关闭修订再打开还是会有修订的&#xff0c; 然而只要点旁边的 接受并停止修订就没有了

word修订模式

word审阅 - 修订 打开修订之后删除文字会显示删除线&#xff0c;删除图片删不掉&#xff0c;解决方法是取消修订模式

word怎么取消退出修订模式

点击审阅&#xff0c;点击接受审订&#xff0c;或者点击拒绝审订

word中审阅和修订、批注

审阅是个tab页&#xff0c;修订是种模式&#xff0c;主要为了协同编辑文档。 人员A写的原稿。 人员B校对。 B人员打开文档&#xff0c;审阅 | 修订 &#xff0c;然后再进行的操作就会存到修订记录中。 例如&#xff1a; 帮住 修改为 帮助 修订完毕之后&#xff0c;将文档发…

word文件服务器拒绝接收,Word2019文档中接受与拒绝修订的方法

查看了修订内容后&#xff0c;可根据Word文档的内容决定是接受还是拒绝修订。接受修订内容后&#xff0c;程序会将修改后的内容显示在Word文档中&#xff0c;修改前的内容不会再显示出来&#xff0c;而拒绝修订则会将修改后的内容删除&#xff0c;被修改的内容恢复原样。本文图…