第一个pro*C demo
来源:互联网 发布:鲲鹏房地产大数据平台 编辑:程序博客网 时间:2024/06/05 04:20
该程序很简单,就是用C从ORACLE,把当前日期显示出来就OK,作为一个简单的DEMO
(一)写PRO*C
/*===========================================================================
* pro*c编译方法:
* 预编译 proc test.pc
* 编译 gcc -o test test.c $ORACLE_HOME/lib/libclntsh.so
* 作者 foxliu
* 时间 2009-10
*============================================================================*/
#include <stdio.h>
#include <sqlca.h>
int main(int argc,char **argv)
{
/*声明SQL变量*/
EXEC SQL BEGIN DECLARE SECTION;
/*VARCHAR预编译后为struct { unsigned short len; unsigned char arr[20];}*/
VARCHAR user[20],pass[20],tnsname[20];
char crruentDate[15];
EXEC SQL END DECLARE SECTION;
/*声明C变量*/
int i=0;
strcpy(user.arr,"dbrevass");
user.len=strlen((char *)user.arr);
strcpy(pass.arr,"dbrevass");
pass.len=strlen((char *)pass.arr);
strcpy(tnsname.arr,"wapp");
tnsname.len=strlen((char *)tnsname.arr);
/*Connect the DB*/
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;
/*printf("%d",sqlca.sqlcode);*/
/*游标声明*/
EXEC SQL declare emp_cursor cursor for
select sysdate from dual;
EXEC SQL open emp_cursor;
EXEC SQL WHENEVER NOT FOUND DO break;
while(1)
{
EXEC SQL fetch emp_cursor into :crruentDate;
printf("Today is %s/n",crruentDate);
i=i+1;
}
printf("get %d records/n",i);
EXEC SQL close emp_cursor;
EXEC SQL commit work release;
}
==========================================
(二)写MAKEFILE
#C++ compiler command
CCC= gcc
PROC= proc
# Options to be passed to your C++ compiler:
CCOPTIONS=-g
CFLAGS=-I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/plsql/public -I$(O
RACLE_HOME)/network/public
LFLAGS=-L$(ORACLE_HOME)/lib/ -lclntsh `cat $(ORACLE_HOME)/lib/ldflags` `cat $(ORACLE_HOME)/lib/sysliblist` -lm -lpthread -lpthre
ad
# Full path to the include:
SYSINCL=-I/usr/include
ORAINCL=-I$(ORACLE_HOME)/precomp/public
APPINCL= -I./include
ORALIB=-L$(ORACLE_HOME)/lib `cat $(ORACLE_HOME)/lib/sysliblist`
SYSLIB= -lclntsh -lm -lpthread
INCLFLAG=$(APPINCL) $(SYSINCL) $(ORAINCL)
PROCFLAG=include=./include include=/usr/include include=/usr/include/linux
LIBFLAG=$(ORALIB) $(SYSLIB)
# Application used记得编译过程前面一定要是tab不能是空格
all:testt publish
testt:./test.o
$(CCC) $(CCOPTIONS) -o ./testt ./test.o $(LIBFLAG)
./test.o:./test.pc
$(PROC) parse=none ./test.pc $(PROCFLAG)
$(CCC) $(CCOPTIONS) -c ./test.c -o ./test.o $(INCLFLAG)
publish:
rm -f ./*.o
=====================================================
(三)执行make后,生成了test.c和目标文件testt
<bnmsbkg@PERFMON3:/ibnmsbkg/exp/test>testt
回显结果:
Today is 30-OCT-09
get 1 records
需要注意的是:
1.写makefile
写makefile时一定要注意的问题
testt:./test.o
$(CCC) $(CCOPTIONS) -o ./testt ./test.o $(LIBFLAG)
等在COMMAND前面即$(CCC) $(CCOPTIONS) -o ./testt ./test.o $(LIBFLAG)一定是
TAB键,不能是空格。
2.makefile些好后编译通过生成可执行文件testt(随便取的名字,只要不是关键字就好)
值得重点注意的是:
生成的可执行文件千万别取名叫 test
开始我就犯了这个错,导致执行不出结果
找了半天原因。
后头man了一下test终于发现原因
原因在于test为shell关键字,
每次写SHELL的时候自己都在用竟然忘记了
太该打了 例如if(test $1 ge $2)等等。
每次执行
test相当于执行的系统的test命令
导致当前目录的test可执行文件没被执行
当然不出结果,
怪不得找了半天原因找不到。汗啊
如果非要用关键字也不是不可以
那执行的时候就这样写吧
<bnmsbkg@PERFMON3:/ibnmsbkg/exp/test>. ./test
<bnmsbkg@PERFMON3:/ibnmsbkg/exp/test>test1
回显结果:
Today is 30-OCT-09
get 1 records
- 第一个pro*C demo
- 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
- IText第一个DEMO
- IText第一个DEMO
- [StoryToolKit]第一个demo
- IText第一个DEMO .
- Servlet 第一个DEMO
- 第一个demo
- EasyUI 第一个demo
- js第一个demo
- 第一个Python demo
- nodejs第一个demo
- monkeyrunner第一个demo
- Mybatis 第一个Demo
- springboot第一个demo
- 工作流第一个demo
- Pro*c在oracle10g上的第一个入门测试程序
- netbeans + flex 第一个DEMO
- 谈谈职业规划——CSDN对我的采访 【转】——CSDN陈皓
- ASP.NET MVC 入门 -- 6、TempData
- 发送字符串到当前光标所在位置
- gcc的内联支持
- 第一章:重构,第一个案例(读书笔记系列2)
- 第一个pro*C demo
- He's Just Not That Into You
- 怎样使用JavaScript存储Adobe AIR应用程序首选项
- C# 实现在线软件自动升级自动下载更新文件
- C#Socket多线程实例
- Lightbox JS
- SQL Server中数据导入导出三种方法比较
- DB2中有关日期和时间的函数,及应用
- open source