ProCCplus编程解密.docx

上传人:b****7 文档编号:26323868 上传时间:2023-06-17 格式:DOCX 页数:16 大小:47.04KB
下载 相关 举报
ProCCplus编程解密.docx_第1页
第1页 / 共16页
ProCCplus编程解密.docx_第2页
第2页 / 共16页
ProCCplus编程解密.docx_第3页
第3页 / 共16页
ProCCplus编程解密.docx_第4页
第4页 / 共16页
ProCCplus编程解密.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ProCCplus编程解密.docx

《ProCCplus编程解密.docx》由会员分享,可在线阅读,更多相关《ProCCplus编程解密.docx(16页珍藏版)》请在冰豆网上搜索。

ProCCplus编程解密.docx

ProCCplus编程解密

Pro*C/C++编程

讲稿

Version1.0

Pro*C/C++Programming

 

达内IT培训集团

加拿大达内集团

研发二部

修订历史

摘要

日期

修改原因

版本

文档创建

2009-4-18

新建

1.0

目录

1.Pro*C/C++基本结构4

1.1.Pro*C/C++文件结构4

1.2.Pro*C/C++结构说明4

1.2.1.注释4

1.2.2.字面值4

1.2.3.变量说明部分(变量定义部分)5

1.2.4.其他语法规则5

1.3.第一个Pro*C/C++程序6

1.4.编译运行Pro*C/C++程序6

1.4.1.常用编译选项说明6

1.4.2.在window下编译运行7

1.4.3.在Unix下编译运行7

2.Pro*C/C++基础8

3.Pro*C/C++SQL语句8

4.Pro*C/C++PL/SQL块8

5.Pro*C/C++事务处理8

6.Pro*C/C++动态SQL技术8

1.Pro*C/C++基本结构

1.1.Pro*C/C++文件结构

1.2.Pro*C/C++结构说明

1.2.1.注释

a.单行注释

使用ANSISQL标准注释--。

b.多行注释

使用C/C++标准块注释/**/。

1.2.2.字面值

使用C/C++的字面值即可,可以使用C/C++中的后缀L,F,U与前缀0X等。

可以使用在任何地方。

字符串在SQL语句中例外。

1.2.3.变量说明部分(变量定义部分)

a.变量定义部分的语法:

EXECSQLBEGINDECLARESECTION;

……

EXECSQLENDDECLARESECTION;

b.在变量定义部分只能使用的语句:

1.宿主变量和指示变量的定义。

2.C/C++变量。

3.EXECSQLDECLARE语句。

4.EXECSQLINCLUDE语句。

5.EXECSQLVAR语句。

6.EXECSQLTYPE语句。

7.EXECORACLE语句。

8.C/C++注释。

1.2.4.其他语法规则

a.’’与””的区别。

在SQL中‘’表示字符串,””表示区分大小写。

在C中‘’表示字符,””表示字符串。

b.文件长度的限制。

在pc程序中文件是有大小限制的。

c.宿主变量(hostvariable)与指示变量

宿主变量名原则上没有长度限制,但实际预编译只取前面31位。

SQL92标准建议限制在18位符号。

d.续行符号

天下的续行符号都一样\。

可以使用在SQL与C语言中。

e.行长度限制

pc程序的默认行的长度是1024字节。

f.语句结束符号

SQL与C/C++的语句结束符号都是分号;。

1.3.第一个Pro*C/C++程序

#include

#include

#include

#include

/*定义部分*/

EXECSQLBEGINDECLARESECTION;

charusername[10],password[10];

EXECSQLENDDECLARESECTION;

/*程序体*/

intmain()

{

printf("inputname:

");

gets(username);

printf("inputpass:

");

gets(password);

EXECSQLCONNECT:

usernameIDENTIFIEDBY:

password;

if(sqlca.sqlcode==0)

{

printf("connectok\n");

}

else

{

printf("connectfail\n");

}

return0;

}

1.4.编译运行Pro*C/C++程序

1.4.1.常用编译选项说明

1.INAME:

指定输入文件名,该选项是必须的,当该选项是第一个选项的时候,可以省略INAME。

2.ONAME:

指定输出文件名,就是C/C++代码文件。

该选项是可选的,如果不指定该选项,就使用INAME指定的输入文件名,后缀由CPP_SUFFIX选项确定,就是.c或者.cpp。

3.INCLUDE:

该选项指定#include与EXECSQLINCLUDE语句的头文件所在路径。

4.PARSE:

该选项用于指定预编译器解析pc文件的方法,默认值是FULL。

PARSE的值有:

FULL、PARTIAL、NONE。

如果要生成C++代码,则必须指定为NONE、PARTIAL。

如果PARSE设置为NONE与PARTIAL,则必须在定义部分定义宿主变量。

5.SQLCHECK:

该选项用于指定SQL语法和语义的检查方式,默认值是SYNTAX。

SQLCHECK的值有:

SEMANTICS、FULL、SYNTAX。

如果在pc程序中内嵌PL/SQL,则必须设置为SEMANTICS或FULL。

由于设置SEMANTICS或FULL要连接服务器进行语义检查,所以必须设置USERID。

6.USERID:

用户指定用户名、口令、网络服务名。

语法:

USERID=用户/口令@网络服务名

当SQLCHECK设置成SEMANTICS或者FULL的时候必须设置USERID。

注意:

还有很多其他选项,这里不一一介绍,但要注意一点的是:

设置如下选项后MODE=ANSICODE=CPPPARSE=NONE|PARTIAL,宿主变量必须在定义部分声明。

1.4.2.在window下编译运行

在window下编译步骤如下:

1.使用proc预编译pc文件成C或者C++文件。

注意上面选项的使用。

2.在VC++2005的环境下需要配置如下两个目录和一个文件引入:

a)${ORA_HOME}/precomp/include。

b)${ORA_HOME}/oci/include。

c)把${ORA_HOME}/precomp/lib/msvc下的oraSQL9.LIB文件:

该文件引入到项目中。

3.把预编译后的C与C++文件加入项目

1.4.3.在Unix下编译运行

在Unix下的编译步骤如下:

1.使用proc预编译pc文件成C或者C++文件。

注意上面选项的使用。

2.编写Makefile编译预编译后的C或者C++文件。

在编译选项中加入如下头文件与库:

a)${ORA_HOME}/precomp/include。

b)${ORA_HOME}/oci/include。

c)clntsh库

Unix下的Makefile例子:

declare:

declare.c

gccdeclare.c-odeclare-I/oracledata/oracle10g/product/10g/precomp/public-lclntsh

要确定proc的安装路径请使用whichproc查看。

2.Pro*C/C++基础

2.1.数据类型

2.1.1.Oracle内部数据类型

Oracle数据就是Oracle数据库内部使用的数据类型:

VARCHAR2:

变长字符串,最大4000字节

CHAR:

定长字符串,最大2000字节

NUMBER(p,s):

数字类型,p精度,s标度

DATE:

日期时间数据,7字节

RAW:

变长二进制数据,最大2000字节

LONG:

大批量数据,最大2G字节

LONGRAW:

大二进制数据,最大2G字节

CLOB:

大批量字符数据,最大4G

BLOB:

大批量二进制数据,最大4G

BFILE:

OS文件数据

NCHAR,NVARCHAR2,NCLOB:

本地字符集数据

ROWID:

伪列——表行物理地址

日期的格式:

字节

1

2

3

4

5

6

7

含义

世纪

例子

119

190

12

6

1

1

1

06-DEC-1990

2.1.2.Oracle外部数据类型

Oracle外部数据类型是宿主程序所引用的数据类型,在运行Pro*C/C++程序的时候,Oracle会根据需要将宿主变量的数据类型映射成Oracle外部数据类型,在编写Pro*C/C++程序的时候不能直接使用Oracle外部数据类型来定义宿主变量。

VARCHAR2:

变长字符串

NUMBER:

数字值

INTEGER:

有符号整数

FLOAT:

浮点数

STRING:

以NULL终止的变长字符串

VARNUM:

数字值,但包含数字长度

LONG:

长字符串

VARCHAR:

变长字符串

ROWID:

二进制值

DATE:

日期

VARRAW:

变长二进制

RAW:

定长二进制

LONGRAW:

定长二进制

UNSIGNED:

无符号整数

LONGVARCHAR:

变长字符串

LONGVARRAW:

变长二进制

CHAR:

定长字符

CHARZ:

NULL终止定长字符串

CHARF:

等价CHAR的字符数据类型

MLSLABEL:

操作系统标记

2.1.3.数据类型转换

Pro*C/C++应用程序与Oracle进行数据传递的时候,需要使用宿主变量,并且Oracle会将宿主变量的实际数据类型映射成Oracle外部数据类型,以保证数据类型兼容Oracle的内部数据类型。

数据类型默认映射关系:

宿主变量类型

Oacle外部数据类型

charchar[n]char*

VARCHAR2

STRING

intint*

INTEGER

shortshort*

INTEGER

longlong*

INTEGER

floatfloat*

FLOAT

doubledouble*

FLOAT

VARCHAR*VARCHAR[N]

VARCHAR

2.1.4.定义变量

1.宿主变量

charname[10];

floatsalary;

对于C++,宿主变量必须定义在说明区。

EXECSQLBEGINDECLARESECTION;

charname[10];

floatsalary;

EXECSQLENDDECLARESECTION;

只能定义一维数组,Oracle把二维数组当一维数组处理。

2.指示器变量

指示变量用于处理NULL值,该类型必须定义成2字节的整数变量。

指示变量是可选的,如果要引用该类变量,则必须与宿主变量结合使用。

语法:

short指示变量;

宿主变量indicator:

指示变量

Indicator可以省略。

3.VARCHAR变量

语法:

VARCHARusername[20];

经过Pro*C/C++翻译成结构

struct

{

unsignedshortlen;

unsignedchararr[20];

}username;

在Pro*C/C++程序中可以直接使用arr与len成员变量。

4.游标变量

语法:

sql_cursor游标变量;

5.ROWID变量

语法:

OCIRowid*变量名;

6.指针变量

语法:

char*name;

2.2.SQL变量的说明与引用

2.2.1.SQL变量的说明

1.SQL变量在引用之前必须说明。

2.SQL变量说明时可以初始化。

3.SQL变量可以一个语句说明多个变量。

4.SQL变量的说明可以使用auto,static,extern。

但不允许使用register说明修饰符号。

2.2.2.SQL变量的引用

1.直接使用

2.在嵌入SQL中使用

2.3.通信区说明

2.3.1.SQLCA说明

SQLCA是一个结构体类型,是Oracle与应用程序的一个接口,主要处理错误与事件。

2.3.2.SQLCA结构

structsqlca

{

//被初始化唯sqlca,标识SQL通讯区

charsqlcaid[8];

//SQL通讯区的长度

longsqlabc;

//最近执行的SQL语句的状态码

//0:

正确执行

//>0:

执行了语句,但没有记录行返回

//<0:

数据库,系统,网络故障,SQL语句没有执行

longsqlcode;

struct

{

//sqlerrmc中文本长度

unsignedshortsqlerrml;

//与sqlcode一致的对应的错误信息文本

//只有当sqlcode<0才能访问,否则是上次错误信息

charsqlerrmc[70];

}sqlerrm;

//保留字段,没有使用

charsqlerrp[8];

//sqlerrd[0],sqlerrd[1]没有使用

//sqlerrd[2]SQL语句处理的行数,如果SQL执行失败,则没有定义

//sqlerrd[3]没有使用

//sqlerrd[4]出现语法分析错误的字符开始位置,第一个位置是0

//sqlerrd[5]没有使用

longsqlerrd[6];

//警告标记

//sqlwarn[0]其他警告标记设置,该标记就被设置

//sqlwarn[1]字段值被截断输出到宿主变量的时候被设置

//sqlwarn[2]没有使用

//sqlwarn[3]查询字段个数不等于宿主变量个数的时候被设置

//sqlwarn[4]表中记录被没有where子句的delete,update处理的时候被设置

//sqlwarn[5]当EXECSQLCREATE{PROCDURE|FUNCTION|PACKAGE}语句编译错误的时候被设置

sqlwarn[6],sqlwarn[7]没有被使用

charsqlwarn[8];

//没有被使用

charsqlext[8];

};

structsqlcasqlca;

3.Pro*C/C++SQL语句

3.1.Pro*C/C++能嵌入的SQL语句

3.2.嵌入式SQL语句的写法

3.3.应用程序登录

3.4.插入、更新、删除

3.5.查询

3.6.LOB数据的处理

4.Pro*C/C++PL/SQL块

4.1.嵌入PL/SQL块的语法

4.2.PL/SQL块中宿主变量的使用

4.3.使用光标

4.4.存储函数与过程

4.5.错误处理

5.Pro*C/C++事务处理

5.1.事务的定义与提交

5.2.事务回滚

5.3.只读事务

6.Pro*C/C++动态SQL技术

6.1.动态SQL的优点

6.2.动态SQL方法1

6.3.动态SQL方法2

6.4.动态SQL方法3

6.5.动态SQL方法4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1