oracle头文件 makefile,Pro*c/c++ makefile编译相关

Pro*c/c++ 欲编译选项

1:iname

作用:该选项使用与制定输入的文件名,并且是必须的。当指定的是pro*c的原程序的时候,文件扩展名.pc可以忽略。

Exp: iname=path_add_filename

2:oname

作用:该选项用于指定输出的文件名,如果该选项没有的话,输出的文件名默认为输入的编译文件名,文件后缀则由选项CPP_SUFFIX确定。编译输出的文件是欲编译之后的c/c++代码文件。

Exp:oname=path_and_filenema

3:include

作用:该选项用于指定#define或者EXCEL SQL INCLUDE 语句的头文件所在的路径。

Exp:include=路径名或include=(路径1,路径2…………)

说明:编译的时候编译器会按照以下的顺序搜索头文件:

1) 当前的目录

2) Sys_include 选项所指定的系统目录

3) Include 选项所指定的路径

4) 标准头文件的内置目录

4:parse

作用:该选项用于指定编译器解析Pro*c/c++源文件的方法,默认值为full

Exp:parse={full | partial | none}

注意:

1) 如果要生成的c/c++代码,则必须将parse设为none或者partial

2) 如果parse设置为none或者partial,那么必须在定义部分内定义宿主变量。

5:sqlcheck

作用:该选项指定用于sql语法和语义的检查方式,默认为syntax。该选项可以内嵌到程序中,也可以写在命令行键入。

Exp:sqlcheck={semantics | full | syntax}

注意:

1) 如果Pro*c/c++源程序内嵌了pl/sql块,那么在于编译时必须将该选项设置为semantics 或者 full。

2) 当将sqlcheck设置为semantics 或者 full

时,在欲编译源程序时需要进行语义检查。因为语义检查需要访问数据字典,所以必须设置useid。

6:useid

作用:该选项用于指定用户名,口令和网络服务名

Exp:useid=用户名/口令@网络服务名

注意:当将sqlcheck设置为semantics 或者 full 时,必须设置useid。

二:在命令行欲编译

使用oracle提供的欲编译工具proc来完成

Exp:proc [ option_name=value ] [option_name=valuse] ………………

注意:option_name制定欲编译的选项,value等于选项的值

三:使用whenever语句

Exp:exec sql whenener

注意:condition为用于检测的条件,action用于指定满足特殊条件之后要执行的操作。

1:condition

1) sqlwarning:用于检测oracle警告。

2) sqlerror:用于检测oracle错误。当检测到该条件时候sql.sqlcode会被设置为负值

3) Not found:用于检测select或者fatch操作未检测到行的情况

a) 当mode=oracle的时候,如果没有满足条件记录,sql.sqlcode=1403

b) 当mode=ansi的时候,如果没有满足条件记录,sql.sqlcode=100

2:action

1) countinue:继续运行下一条语句

2) do:执行错误处理函数

3) goto label_name:转移到标号处执行

4) stop:会退事务停止运行

3:whenever语句范围

Whenever是定义语句,他会自动检测应用程序中所有的sql语句。当编写Pro*c/c++应用程序时。Whenever语句应该放在第一条内嵌sql语句(例如connet)之前。如果程序中有多条的Whenever语句,则在随后的处理中,只有最近的Whenever语句起作用。

四:关于游标

1:使用费滚动游标

1) 定义游标:

Exec sql declare 游标名 cursor for sql语句

2) 打开游标

EXEC SQL open Cur_Skgk;

3)提取游标

EXEC SQL fetch Cur_Skgk into

5) 关闭游标

EXEC SQL close Cur_Skgk;

2:使用滚动游标

1) 定义游标

Exec sql declare 游标名 scroll cursor for

sql语句

2)打开游标

EXEC SQL open Cur_Skgk;

6) 提取游标

打开滚送游标之后,orcale会将数据放到游标结果集中,然后就可以处理其中的任意数据了。

Fetch fires:提取结果集中的第一条记录

Fetch prior:提取当前行的前一条记录

Fetch next:提取当前行的下一条记录

Fetch last:提取记录行的最后以行记录

Fetch current:提取当前行的记录

Fetch relative n:提取相当对于当前行的第n行数据。N可以有正负之分,正后数负往前数

Fetch absolute n:提取结果集中的第n行记录

注意:Fetch next:相当于非滚动游标中的Fetch 语句。

3) 关闭游标

EXEC SQL close Cur_Skgk;

//例子:编译一个proc.pc程序为aa.exe文件

object=proc

houzui=cpp

spc=proc.pc

exec=aa.exe

cc=gcc

all: PROC EXEC

PROC:

ifeq ($(houzui),cpp)

proc iname=$(spc) sqlcheck=semantics userid=res/res@kf code=cpp

oname=$(obj

ect).$(houzui)

else

proc iname=$(spc) sqlcheck=semantics userid=res/res@kf

oname=$(object).$(ho

uzui)

endif

EXEC:

$(cc) $(object).$(houzui) -o $(exec) -L$(ORACLE_HOME)/lib32

-lclntsh

.PHONY: clean

clean:

-rm edit $(object).$(houzui)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值