ORACLE

发布 2023-05-19 17:46:28 阅读 8480

pro * c 的使用。

一 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有个感性的认识, 特将二者差别比较如下:

c的全程变量说明。

c源程序函数1:同函数k。

函数2:同函数k。

c的局部变量说明。

函数k 可执行语句。

应用程序首部c的外部变量说明。

外部说明段(oracle变量说明)

通讯区说明。

pro*c源程序函数1:同函数k。

函数2:同函数k。

c局部变量说明。

程序体内部说明部分内部说明段。

通讯区说明。

函数kc的可执行语句。

可执行语句 sql的可执行语句

或pl/sql块。

二.pro*c程序的组成结构。

每一个pro*c程序都包括两部分:(1)应用程序首部;(2)应用程序体。

应用程序首部定义了oracle数据库的有关变量, 为在c语言中操纵oracle数据库做好了准备。应用程序体基本上由pro*c的sql语句调用组成。主要指查询select、insert、update、delete等语句。

应用程序的组成结构如图所示。

1. 应用程序首部。

应用程序的首部就是pro*c的开始部分。它包括以下三部分:

c变量描述部分;

sql变量描述部分(declare部分);

sql通信区。

1) .declare部分(描述部分)

描述部分说明程序的sql变量, 定义部分以exec sql begin declare section ;开始和以 exec sql end declare section ;结束的。它可以出现在程序的主部,也可出现在局部。

sql变量的说明和使用。

在说明段能为sql变量指定的数据类型如表所示:

这些数据类型实际上就是c语言的数据类型, 其中varchar中视为c数据类型的扩充。这在以后会谈到。

sql变量的使用应注意以下几点:

必须在描述部分明确定义。

必须使用与其定义相同的大小写格式。

在sql语句中使用时,必须在其之前加一个“:”冒号),但在c语句中引用时不需加冒号。

不能是sql命令中的保留字。

可以带指示变量。

例如: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;

在使用数组时,应注意以下几点;

不支持指针数组。

只支持一维数组, 而 emp-name [100][15]视为一维字符串。

数组最大维数为32767

在一条sql语句中引用多个数组时,这些数组维数应相同。

在values , set, into 或where子名中, 不允许把简单sql变量与数组sql变量混用。

不能在delare部分初始化数组。

例如:下面的引用是非法的。

oracle

实验3 创建数据库并测试数据。实验目的 1 进一步熟悉oracle环境及其操作。2 熟悉创建表及查找,更新等相关操作的sql语句。实验要求 如图所示。学院编码 专业编码 3.2.1 在实验2的基础上,根据如图所示的数据库逻辑结构,创建数据库中的所有表,并定义其相关约束。其中,db grade表必须创...

ORACLE

第三课 视图序列同义词索引。一 关于本节的分析。1 内容 2 教学重点与难点。教学重点 教学难点 3 教学目标。1 知识目标 2 能力目标 3 情感目标 二 教学方法。本课采用边讲边练习的方式教学,让学生亲自动手,逐步熟悉各种语句的使用。三 教学过程。视图。序列 同义词 索引 1 视图 是一个sql...

oracle操作

数据库技术实训。2016年12月。目录。第1章控制文件 4 1.1.oracle数据库启动,关闭操作 4 1.1.1 数据库open状态,创建pfile 静态参数 文件 4 1.1.2 根据pfile启动oracle数据库 4 1.1.3 数据库open转为nomount状态 4 1.1.4 数据库...