📄 0505003.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>
<body>
<div align="justify">
<table border="0" width="100%" class="font" height="57">
<tr>
<td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">VC知识库(五)</font>
</td>
<td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">www.vckbase.com</font>
</td>
</tr>
<tr>
<td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
<font color="#0000c0">
用VC开发基于ORACLE数据库应用程序的两种方法</font>
</td>
</tr>
<tr>
<td width="100%" height="17" class="info" align="center" colspan="2">
北京航空航天大学计算机科学与工程系<br>
黎杰 麦中凡
</td>
</tr>
<tr>
<td width="100%" height="22" class="font" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="5" class="font" colspan="2">
<center>
<font color="#0000c0"></font>
</center>
<p><font color="#ffffff">----</font>
1. 引 言
<p><font color="#ffffff">----</font>
ORACLE 公 司 自1979 年 推 出 基 于SQL 标 准 的 关 系 数 据 库 产 品 到1997 年 版 本8 的 推 出,ORACLE 数 据 库 以 其 支 持 大 数 据 库、 多 用 户 的 高 性 能 事 务 处 理, 对 业 界 各 项 工 业 标 准 的 支 持, 完 整 的 安 全 和 完 整 性 控 制, 支 持 分 布 式 数 据 库 和 分 布 处 理, 具 有 可 移 植 性、 可 兼 容 性 和 可 连 接 性 等 突 出 优 点 倍 受 用 户 喜 爱, 根 据IDG1992 年 全 球UNIX 数 据 库 的 市 场 报 告,ORACLE 占 市 场 销 售 量 的50%。 而 在 客 户 端 的 开 发 工 具 方 面,Visual C++ 也 因 其 强 大 的 功 能 和 高 度 的 灵 活 性 等 特 点 深 受 广 大 程 序 员 的 喜 爱, 因 此 本 文 旨 在 介 绍 使 用Visual C++ 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法。
<p><font color="#ffffff">----</font>
2. 使 用PRO*C 开 发 数 据 库 应 用
<p><font color="#ffffff">----</font>
2.1 PRO*C 工 作 原 理
<p><font color="#ffffff">----</font>
PRO 系 列 是ORACLE 公 司 提 供 的 在 第 三 代 高 级 程 序 设 计 语 言 中 嵌 入SQL 语 句 来 访 问 数 据 库 的 一 套 预 编 译 程 序, 包 括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和PRO*PL/I 六 种。 程 序 员 用 相 应 的 高 级 语 言 编 写 嵌 入SQL 语 句 的PRO 源 程 序( 若 用C 语 言 则 称 为PRO*C 源 程 序) 后 运 行 相 应 的 预 编 译 程 序, 把 嵌 入 的SQL 语 句 转 换 为 标 准 的ORACLE 调 用 并 生 成 目 标 源 程 序, 即 纯 高 级 语 言 格 式 的 源 程 序, 然 后 就 可 以 将 这 些 源 程 序 加 入 用 户 的 程 序 中 调 用, 其 处 理 过 程 如 下 图。
<p><font color="#ffffff">----</font>
ORACLE 预 编 译 程 序 提 供 如 下 功 能:
<p><font color="#ffffff">----</font>
⑴ 能 用 六 种 通 用 的 高 级 程 序 设 计 语 言 中 的 任 何 一 种 编 写 应 用 程 序。
<p><font color="#ffffff">----</font>
⑵ 遵 循ANSI 标 准, 在 高 级 语 言 中 嵌 入SQL 语 句。
<p><font color="#ffffff">----</font>
⑶ 可 采 用 动 态SQL 方 法, 让 程 序 在 运 行 时 接 受 或 构 造 一 个 有 效 的SQL 语 句。
<p><font color="#ffffff">----</font>
⑷ 实 现ORACLE 内 部 数 据 类 型 和 高 级 语 言 数 据 类 型 之 间 的 自 动 转 换。
<p><font color="#ffffff">----</font>
⑸ 可 通 过 在 应 用 程 序 中 嵌 入PL/SQL 事 物 处 理 块 来 改 进 性 能。
<p><font color="#ffffff">----</font>
⑹ 能 在 程 序 行 和 命 令 行 上 指 定 所 需 要 的 预 编 译 可 选 项, 并 可 在 预 编 译 的 过 程 中 改 变 它 们 的 值。
<p><font color="#ffffff">----</font>
⑺ 能 全 面 检 查 嵌 入 的SQL 数 据 操 纵 语 句 和PL/SQL 块 的 文 法 和 语 义。
<p><font color="#ffffff">----</font>
⑻ 可 用SQL*Net 并 行 存 取 多 个 地 点 的ORACLE 数 据 库。
<p><font color="#ffffff">----</font>
⑼ 可 把 数 组 作 为 输 入 和 输 出 程 序 变 量 使 用。
<p><font color="#ffffff">----</font>
⑽ 能 对 应 用 程 序 中 的 代 码 段 进 行 条 件 预 编 译。
<p><font color="#ffffff">----</font>
⑾ 提 供 了 较 强 的 异 常 处 理 功 能。
<p><font color="#ffffff">----</font>
由 此 可 见, 通 过 预 编 译 程 序 与 其 它 高 级 语 言 的 结 合, 既 可 以 利 用SQL 强 有 力 的 功 能 和 灵 活 性 为 数 据 库 应 用 系 统 的 开 发 提 供 强 有 力 的 手 段, 又 可 以 充 分 利 用 高 级 语 言 自 身 在 系 统 开 发 方 面 的 优 势, 从 而 提 供 一 个 完 备 的 基 于ORACLE 数 据 库 应 用 程 序 的 开 发 解 决 方 案。
<p><font color="#ffffff">----</font>
2.2 在VC 中 使 用PRO*C
<p><font color="#ffffff">----</font>
每 个PRO*C 源 文 件 一 般 由 程 序 头 和 程 序 体 两 部 分 组 成。 程 序 头 包 含 宿 主 变 量(SQL 语 句 中 所 包 含 的 变 量) 说 明、 通 讯 区 定 义 和C 外 部 表 示 符 的 说 明 等。 程 序 体 一 般 是 由 若 干 函 数 组 成, 这 些 函 数 内 含 有SQL 语 句( 以EXEC SQL 起 头 的 语 句)。
<p><font color="#ffffff">----</font>
PRO*C 支 持 的 数 据 类 型 包 括VARCHAR2( 变 长 字 符 串)、NUMBER( 二 进 制 数)、INTGER( 有 符 号 整 数)、FLOAT( 浮 点 数)、STRING( 以NULL 结 尾 的 字 符 串)、VARNUM( 变 长 二 进 制 数)、LONG( 变 长 字 符 串)、VARCHAR( 变 长 字 符 串)、ROWID( 二 进 制 值)、DATE( 定 长 日 期/ 时 间 值)、VARRAW( 变 长 二 进 制 数 据)、RAW( 定 长 二 进 制 数 据) 、LONGRAW( 变 长 二 进 制 数 据)、UNSIGNED( 无 符 号 整 数)、LONGVARCHAR( 变 长 字 符 串)、LONGVARRAW( 变 长 二 进 制 数 据)、CHAR( 定 长 字 符 串)、CHARZ(C 中 定 长 以NULL 结 尾 的 字 符 串)、MLSLABEL( 变 长 二 进 制 数 据)。
<p><font color="#ffffff">----</font>
在PRO*C 中 不 能 使 用'l' 或'u' 作 词 尾 或'0x' 作 词 头 修 饰 常 量; 在SQL 语 句 中 使 用 单 引 号 来 定 义 字 符 串, 用 双 引 号 来 定 义 特 殊 的 或 小 写 字 符 的 标 识 符( 如 表 名 等);SQL 语 句 中 不 允 许 使 用C 中 的 寻 址、 间 接、 位 逻 辑、 复 合 赋 值、?=、-、++、%、<<、>> 操 作 符 并 且 用NOT、AND、OR、= 代 替!、&&、||、==。
<p><font color="#ffffff">----</font>
下 面 的 程 序 是 一 个 联 结 数 据 库 的PRO*C 源 程 序 例 子。
<pre>
#include < sqlca.h > //声明SQL通讯区
#include < string.h >
#include < afxwin.h >
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20]; //声明宿主变量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -