- 浏览: 244953 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Orc3Ming:
哦,脚本的解释路径,不是注释。
RHEL6.4更改为CentOS6.4的yum源 -
Orc3Ming:
将第一行 #!/usr/bin/python 修改为 #!/u ...
RHEL6.4更改为CentOS6.4的yum源 -
anniecharlotte:
请问:如果登录某个节点
执行nodetool ring查看集群 ...
Cassandra集群 -
Q_Qkings8:
给了我好的提示,已经成功的解决了问题
Eclipse Debug Source not found for -
kevin.wang:
feijin1981 写道我也有同样的问题,但是Window ...
Eclipse Debug Source not found for
一 Pro*C 程序概述:
1.什么是Pro*C程序
在ORACLE数据库管理和系统中, 有三种访问数据库的方法;
(1) 用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库;
(2) 用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
(3) 利用在第三代语言内嵌入的SQL语言或ORACLE库函数调用来访问。
Pro*C就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL语言, 利用这些SQL语言可以完成动态地建立、修改和删除数据库中的表,也可以查询、插入、修改和删除数据库表中的行, 还可以实现事务的提交和回滚。
在Pro*C程序中还可以嵌入PL/SQL块, 以改进应用程序的性能, 特别是在网络环境下,可以减少网络传输和处理的总开销。
2.Pro*C的程序结构图
通俗来说,Pro*C程序实际是内嵌有SQL语句或PL/SQL块的C程序, 因此它的组成很类似C程序。 但因为它内嵌有SQL语句或PL/SQL块, 所以它还含有与之不同的成份。为了让大家对Pro*C有个感性的认识, 特将二者差别比较如下:
二.Pro*C程序的组成结构
每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体
应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE等语句。
应用程序的组成结构如图所示:
1. 应用程序首部
应用程序的首部就是Pro*C的开始部分。它包括以下三部分:
l C变量描述部分;
l SQL变量描述部分(DECLARE部分);
l SQL通信区。
(1) .DECLARE部分(描述部分)
描述部分说明程序的SQL变量, 定义部分以EXEC SQL BEGIN DECLARE SECTION ;开始和以 EXEC SQL END DECLARE SECTION ;结束的。它可以出现在程序的主部,也可出现在局部
l SQL变量的说明和使用
在说明段能为SQL变量指定的数据类型如表所示:
这些数据类型实际上就是C语言的数据类型, 其中VARCHAR中视为C数据类型的扩充。这在以后会谈到。
SQL变量的使用应注意以下几点:
l 必须在描述部分明确定义
l 必须使用与其定义相同的大小写格式
l 在SQL语句中使用时,必须在其之前加一个“:”(冒号),但在C语句中引用时不需加冒号。
l 不能是SQL命令中的保留字。
l 可以带指示变量。
例如:EXEC SQL BEGIN DECLARE SECTIONS;
VARCHAR programe[30];
Int porgsal, pempno;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT ENAME , SAL
INTO: programe, : progsal
FROM EMP
WHERE EMPNO = : pempno;
(2). 指示器变量的说明和引用
指示变量实际上也是一类SQL变量,它被用来管理与其相关联的宿主变量(即在SQL语句中充 当输入或输出的变量)。每一个宿主变量都可定义一个指示器变量,主要用于处理空值(NULL)
指示器变量的说明基本同一般SQL变量一样, 但必须定义成2字节的整型,如SHORT、INT。在SQL语句中引用时, 其前也应加“:”(冒号),而且必须附在其相关联的宿主变量之后,在C语句中,可独立使用。当指示器变量为-1时,表示空值。例如:
EXEC SQL BEGIN DECLARE SECTION ;
INT dept- number;
SHORT ind – num;
CHAR emp –name;
EXEC SQL END DECLARE SECTION ;
Scanf(“90d %s”, & dept- number , dept – name );
If (dept – number ==0)
Ind – num = -1;
Else
Ind – num = 0;
EXEC SQL INSERT INTO DEPT (DEPTNO, DNAME)
VALUES(:dept – number : ind- num , :dept – name);
其中ind – num是dept – number 的指示器变量。当输入的dept – number 值是0时, 则向DEPT 表的DEPTNO列插入空值。
(3).指针SQL变量的说明和使用
指针SQL变量在引用前也必须在DECLARE 部分先说明。其说明格式同C语言。在SQL语句中引用时,指针名字前要加前缀“:”(冒号)而不加“*”(星号)。在C语句中用法如同C语言的指针变量。
(4).数组SQL变更的说明和引用
在SQL语句中引用数组时,只需写数组名(名字前加冒号), 不需写下标,在C语句中用法如同C语言的数组变量。
使用数组可大大降低网络传输开销。如要向一表插入100行数据,如果没有数组,就要重复100次, 而引用后,只须执行一次insert语句、便可一次性插入。例如:
EXEC SQL BEGIN DECLARE SECTION;
Int emp_number[100];
Char emp_name[100][15];
Float salary[100],commission[100];
Int dept_number;
EXEC SQL END DECLARE SECTION;
….
EXEC SQL SELECT EMPNO,ENAME,SAL,COMM
INTO :emp_number,:emp_name,:salary,:commission
FROM EMP
WHERE DEPTNO=:dept_number;
在使用数组时,应注意以下几点;
l 不支持指针数组
l 只支持一维数组, 而 emp-name [100][15]视为一维字符串
l 数组最大维数为32767
l 在一条SQL语句中引用多个数组时,这些数组维数应相同
l 在VALUES , SET, INTO 或WHERE子名中, 不允许把简单SQL变量与数组SQL变量混用
l 不能在DELARE部分初始化数组
例如:下面的引用是非法的
EXEC SQL BEGIN DECLARE SECTION;
Int dept – num [3] = {10,20,30};
EXEC SQL END DECLARE SECTION ;
EXEC SQL SELECT EMPNO, ENAME , SAL
INTO : emp – num [ i ], : emp – name [ i ], : salarg [ i ]
FROM EMP
(5) 伪类型VARCHAR的说明和引用
VARCHAR变量在引用之前也必须在说明段说明, 说明时必须指出串的最大
长度,如:
EXEC SQL BEGIN DECLARE SECTION;
Int book – number;
VARCHAR book – name [ 50 ];
EXEC SQL END DECLARE SECTION ;
在预编绎时, book – name 被翻译成C语言中的一个结构变量;
Struct { unsigned short len ;
Unsigned chart arr [ 20 ] ;
} boo – name
由此看出, VARCHAR变量实际上是含长度成员和数组成员的结构变量。在SQL语句中引用时,应引用以冒号为前缀的结构名, 而不加下标,在C语句 中引用结构成员。
VARCHAR变量在作输出变量时,由ORACLE自动设置, 在作为输入变量时,程序应先把字符串存入数组成员中, 其长度存入长度成员中,然后再在SQL语句中引用。例如:
Main( )
{ .......
scanf(“90s, 90d’, book – name .arr, & book – number );
book – name .len = strlen (book – name .arr);
EXEC SQL UPDATE BOOK
SET BNAME = : book – name ;
BDESC = : book – number ;
}
(6) SQL通信区
SQL 通信区是用下列语句描述的:
EXEC SQL INCLUDE SQLCA;
此部分提供了用户运行程序的成败记录和错误处理。
SQLCA的组成
SQLCA是一个结构类型的变量,它是ORACLE 和应用程序的一个接口。在执行 Pro*C程序时, ORACLE 把每一个嵌入SQL语句执行的状态信息存入SQLCA中, 根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示:
Struct sqlca
{ char sqlcaid [ 8 ] ; ----à标识通讯区
long sqlabc; ---à 通讯区的长度
long sqlcode; ---à保留最近执行的SQL语句的状态码
struct { unsigned short sqlerrml; -----à信息文本长度
}sqlerrm;
char sqlerrp [ 8 ];
long sqlerrd [ 6 ];
char sqlwarn [ 8 ];
char sqlext [ 8 ];
}
struct sqlca sqlca;
其中, sqlcode在程序中最常用到,它保留了最近执行的SQL语句的状态码。程序员根据这些状态码做出相应的处理。这些状态码值如下:
0: 表示该SQL语句被正确执行,没有发生错误和例外。
>0:ORACLE执行了该语句,但遇到一个例外(如没找到任何数据)。
<0:表示由于数据库、系统、网络或应用程序的错误,ORACLE未执行该SQL语句。
当出现此类错误时,当前事务一般应回滚。
发表评论
-
connect by prior
2012-01-29 14:41 710http://www.blogjava.net/freeman ... -
Oracle 解锁
2011-08-22 11:32 785在for update 查询时,线程被阻塞 查询阻塞线程: ... -
exists与in
2011-07-27 20:53 9941. exists: 不缓存exists() ... -
outer join , inner join , cross join
2010-11-30 13:18 860select * from table1; ID NAME 1 ... -
查看Oracle表空间 tablespace
2010-10-29 09:32 11001. 查看所有表空间大小 SQL> select ta ... -
Oracle--create user& tablespace
2010-10-29 09:22 2571-建立表空间(oracle中的tablespace(表空间)就 ... -
win7下安装Oracle10g
2010-10-03 01:01 1030解决方案: 步骤一:在解压出的oracle文件夹中搜 ... -
Oracle 关于密码及密码文件
2010-09-29 10:49 1590以安装Oracle的用户进入系统: 忘记密码: 1.在命令行下 ... -
修改Oracle端口
2010-09-02 19:20 1365<script>function StorePag ... -
关于Oracle 10g 默认用户、密码及登录问题
2010-09-02 19:02 1900Oracle 10g 默认用户、密码 参见http://sap ... -
Oracle 之 Sequence
2010-08-13 09:01 8021、Create Sequence 你首先要有CREATE ... -
存储过程中 调用 Java
2010-08-12 11:39 839一、如何创建java存储过程? 通常有三种方法来创建java存 ... -
Java 调用Oracle 存储过程
2010-08-12 10:45 15941、存储过程是指保存在 ... -
Java 调用Oracle 函数
2010-08-12 10:26 1481oracle的存储过程和函数区别 1、都可以使用out参数返 ... -
Merge Into
2010-08-12 10:22 1342用途 merge 命令可以用 ... -
Returnning Into 总结
2010-08-12 09:45 937ORACLE的DML语句中可以指定RETURNING语句。使用 ... -
Pro * C 的使用(三)
2010-08-11 18:05 1070(7) 动态定义语句 SQL语句分动态定义语句和静态 ... -
Pro * C 的使用(二)
2010-08-11 18:02 12942.应用程序体 在Pro*C ... -
ref cursor
2010-08-11 16:56 972REF CURSOR 小结 利用REF CURSOR,可以在程 ... -
fetch bulk collect into 批量效率的读取游标数据
2010-08-11 16:14 1159通常我们获取游标数据是用 fetch some_cursor ...
相关推荐
一、Pro*C/C++ 简介 1 1.1、Pro*C/C++ 是什么 1 1.2、Pro*C/C++ 处理流程 2 二、Pro*C/C++ GCC 环境配置 3 2.1、Pro*C/C++ 预编译环境 3 2.2、GCC 编译器 5 三、开始编写第一个Pro*C++代码 5 3.1、第一个Pro*C++代码...
本书分两部分,第一部分为Pro*C程序设计,第二部分为Oracle接口调用(OCI)
说明: 本程序包含数据插入、更新、删除和查询,光标多行查询,数 组多行查询等功能。 程序启动后,显示一个菜单, 选择需要的功能。并进行相应的处理。
数据库连接源码pro*c程序,Oracle的Pro*C预编译器是一个可以让你在C语言源程序中嵌入SQL语句的编程工具。
这是一个用PRO*C编写的与Oracle数据库进行连接的实例,介绍了环境配置及编译、运行方法
一款基于Oracle 11i +pro * C 的通讯录系统,程序包含Makefile和notebook.pc主程序。实现了同学信息的增,删,改,查以及修改密码等功能。
Pro*C就属于第三种开发工具之一,它把过程化语言C和非过程化语言SQL最完善地结合起来,具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL...
oracle-ascii-unload是一个Oracle Pro * C程序,用于将Oracle数据库表中的数据有效地卸载到以control-A分隔的定界ASCII文本文件中(也称为^A或\x01或\001 )。 它本身支持DATE,NUMBER,CHAR,VARCHAR2类型的列。 它...
Pro*C/C++语言就是在标准C/C++语言中通过嵌入SQL 语句完成对数据库操作的一种语言组织方式,为了编译成可执行程序必须经过Oracle 预编译程序预编译成.c/.cpp 源程序,并由系统c/c++编译器编译成可执行程序。...
Oracle的Pro*C预编译器是一个可以让你在C语言源程序中嵌入SQL语句的编程工具。Pro*C预编译器在预编译过程中,将嵌入的SQL语句转换成对标准Oracle运行库的调用,从而生成预编译过的源代码,然后再进行通常的编译、...
Pro*C就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入...
就是C语言#include #include #define MAX 5 //进程数 /*短作业优先算法*/ struct pro { int num; //进程名 int arriveTime; //到达时间 int burst; //运行时间; struct pro *next; }; //函数声明 struct pro* ...
一个完全用 Pro*C 编写的 Oracle 客户端库(用于嵌入式 SQL 的 Oracle C 预编译器)。 实现 Pro*C ANSI 动态 SQL 并通过隐藏 ANSI 动态 SQL 指令为应用程序提供 API。 旨在跨平台移植
Easy Pro*C Lib 是用 C99 编写的,并使用 gcc 3.4+ 构建。 它是平台独立的,支持快速日志机制,特别是它提供了一种非常简单的方式来生成高性能的 DAO。
Pro*C 就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入...
Pro*C就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入...
这是一本我自己以前读过的一本oracle Pro*C编程的入门书籍,里面写的非常详细,很适合新手入门,还有丰富的例程可以借鉴,很值得学习
WinCC PRO V16使用C脚本给变量赋值的具体方法
这只是一个小的例子,是.txt文件.中间有在学习中参考的一些网址,希望对感兴趣的朋友有所帮助。中间的代码在自己的电脑上编译执行成功的!
ORACLE_ProC 一、Pro*C 程序概述 1. 什么是Pro*C程序 在ORACLE数据库管理和系统中,有三种访问数据库的方法: o 用SQL*Plus,它有SQL命令以交互的应用程序访问数据库; o 用第四代语言应用开发工具开发的应用程序...