我的编程空间,编程开发者的网络收藏夹
学习永远不晚

oracle pro*c的一个简单例子

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

oracle pro*c的一个简单例子

oracle pro*c的一个简单例子

一、环境

参见unbuntu下Docker安装oracle和mysql,sqlserver。

创建例子用到的视图:


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);

    
    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s/n", (int)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("连接成功

");
    else{
      printf("连接失败,exit(0)");
      getchar();
      exit(0);
    }
    EXEC SQL DECLARE c2 CURSOR FOR
      SELECT SNO,SNAME FROM STUDENT;

    printf( "%-13s%-8s
","学号","学生姓名");
    printf( "%-13s%-8s
","--------","------");
    EXEC SQL OPEN c2;
    do{
      EXEC SQL FETCH c2 INTO :sno,:sname; 
      if (sqlca.sqlcode!= 0) break;
      printf( "%-13s%-8s
",sno, sname);
    }while(1);


    printf("查询学生成绩,请输入学生号:
");
    scanf("%s",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
", "学生姓名","课程名","成绩");
    printf( "%-13s%-15s%-6s
", "--------","----------", "-----");
    do{
     EXEC SQL FETCH c1 INTO :sname,:cname,:grade;
     if(sqlca.sqlcode != 0) break;
     printf( "%-13s%-15s%-6.2f
", sname, cname, grade);
    } while(1);
    return 0;

}

Makefile:


TARGET  = stu_query
class="lazy" data-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): $(class="lazy" data-srcS) $(OBJS)
	$(CC) -o $@ $(OBJS) $(CFLAGS) $(COMMLIB)
 
clean :
	$(RM) *.lis $(class="lazy" data-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 13:47:49 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      马娟   
查询学生成绩,请输入学生号:
9402203
学生姓名 课程名      成绩
--------     ----------     ----- 
金力标    数学分析   99.00 
金力标    数据结构   88.00 
金力标    分析力学   86.00 
金力标    高等分析   98.00 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

oracle pro*c的一个简单例子

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle pro*c的一个简单例子

一、环境 参见unbuntu下Docker安装oracle和mysql,sqlserver。 创建例子用到的视图: SQL> create view mysc as select sc.sno,sc.cno,sc.grade,student.sname,cou
oracle pro*c的一个简单例子
2014-06-06

一个简单的eXosip的register注册例子

以下是一个简单的eXosip库在C语言中实现注册的示例:```c#include #include #include int main(void) { int
2023-09-08

一个关于遗传算法优化的简单例子

在课程上学了一些关于遗传算法的思想的,想用这个思想来写一个简单的小例子。先来说遗传算法的思想:遗传算法是模拟生物的遗传、变异、选择、进化来对问题的解进行优化,可以理解为将一组初始解看成是“基因”,在求解的开始设置一个过滤器,对“基因”进行筛
2023-01-31

Python 一个简单的读取excel例

1.1 安装pythonmac上的python默认版本是python2,如下:hanruikaideMacBook-Pro:local hanruikai$ pythonPython 2.7.10 (default, Feb 7 2017
2023-01-31

如何使用C++编写一个简单的电子词典程序?

如何使用C++编写一个简单的电子词典程序?随着科技的发展,电子词典成为了我们生活中常见的工具。在这篇文章中,我将介绍如何使用C++编写一个简单的电子词典程序,让你能够快速查询单词的含义。这个程序将使用哈希表数据结构来存储单词和其含义的对应关
如何使用C++编写一个简单的电子词典程序?
2023-11-02

如何使用C++编写一个简单的电子商务平台?

如何使用C++编写一个简单的电子商务平台?随着互联网的发展和普及,电子商务已经成为了现代商业运营的重要手段。对于开发者来说,了解如何使用C++编写一个简单的电子商务平台是非常有用的技能。本文将介绍一些基本的概念和技术,以帮助你快速上手。首先
如何使用C++编写一个简单的电子商务平台?
2023-11-02

C++实现一个简单消息队列的示例详解

消息队列在多线程的场景有时会用到,尤其是线程通信跨线程调用的时候,就可以使用消息队列进行通信。本文将利用C++实现一个简单的消息队列,感兴趣的可以了解一下
2022-12-15

如何利用C++实现一个简单的电子邮件发送程序?

如何利用C++实现一个简单的电子邮件发送程序?随着互联网的普及,电子邮件已经成为人们日常生活和工作中不可或缺的一部分。在C++编程中,我们可以利用SMTP(Simple Mail Transfer Protocol)协议实现一个简单的电子邮
如何利用C++实现一个简单的电子邮件发送程序?
2023-11-02

一个简单的类加载器URLClassLoader案例

这篇文章主要介绍了一个简单的类加载器URLClassLoader案例,这里写了一个小demo,来加深对于反射的理解,需要的朋友可以参考下
2023-05-14

轻松创建nodejs服务器(1):一个简单nodejs服务器例子

我们先来实现一个简单的例子,hello world。 似乎每种语言教程的第一节都会讲这个,我们也不例外。 首先我们先创建一个项目目录,目录可自己定义,本案例的目录为 e:/nodetest/。 由于我们要搭建的是服务器,所以我把第一个文件命
2022-06-04

C++怎么实现一个简单的线程池

本文小编为大家详细介绍“C++怎么实现一个简单的线程池”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现一个简单的线程池”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、设计线程池应该包括保存线程的容
2023-06-30

基于C++编写一个简单的服务器

这篇文章主要为大家详细介绍了如何基于C++编写一个简单的服务器,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
2023-03-14

springboot如何实现一个简单的aop实例

小编给大家分享一下springboot如何实现一个简单的aop实例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介AOP(Aspect-Oriented Programming:面向切面编程)aop能将一些繁琐、重复、无
2023-06-25

编程热搜

目录