1. 引 言
ORACLE 公 司 自1979 年 推 出 基 于SQL 标 准的 关 系 数 据 库 产品 到1997 年 版 本8 的 推 出,ORACLE 数 据 库 以其 支 持 大 数 据 库、 多 用 户 的 高 性 能 事 务 处 理, 对 业 界各 项 工 业 标 准 的 支持, 完 整 的 安 全 和 完 整 性 控 制, 支持 分 布 式 数 据 库 和 分布 处 理, 具 有 可 移 植 性、 可 兼 容性 和 可 连 接 性 等 突 出 优点 倍 受 用 户 喜 爱, 根 据IDG1992 年全 球UNIX 数 据 库 的 市 场 报告,ORACLE 占 市 场 销 售 量 的50%。 而在 客 户 端 的 开 发 工 具 方面,Visual C++ 也 因 其 强 大 的 功 能和 高 度 的 灵 活 性 等 特 点 深 受 广 大 程 序 员 的 喜 爱, 因 此本 文 旨 在 介 绍 使 用Visual C++ 开 发 基 于ORACLE 数 据 库 应 用
程序 的 两 种 方 法。
2. 使 用PRO*C 开 发 数 据 库 应 用
2.1 PRO*C 工 作 原 理
PRO 系 列 是ORACLE 公 司 提 供 的 在 第 三代 高 级 程 序 设 计 语 言 中 嵌 入SQL 语 句 来 访 问 数 据 库 的 一套 预 编 译 程 序, 包 括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和PRO*PL/I 六 种。 程 序 员 用 相 应 的 高 级 语 言 编 写 嵌 入SQL 语句 的PRO 源 程 序( 若 用C 语 言 则 称 为PRO*C 源 程 序) 后 运 行 相应 的 预 编 译 程 序, 把 嵌 入 的SQL 语 句 转 换 为 标 准 的ORACLE 调 用 并 生 成 目 标 源 程 序, 即 纯 高 级 语 言 格 式 的 源
程序, 然 后 就 可 以 将 这 些 源 程 序 加 入 用 户 的 程 序 中 调用, 其 处 理 过 程 如 下 图。
ORACLE 预 编 译 程 序 提 供 如 下 功 能:
⑴ 能 用 六 种 通 用 的 高 级 程 序 设计 语 言 中 的 任 何 一 种 编 写 应 用 程 序。
⑵ 遵 循ANSI 标 准, 在 高 级 语 言 中嵌 入SQL 语 句。
⑶ 可 采 用 动 态SQL 方 法, 让 程 序 在运 行 时 接 受 或 构 造 一 个 有 效 的SQL 语 句。
⑷ 实 现ORACLE 内 部 数 据 类 型 和 高 级语 言 数 据 类 型 之 间 的 自 动 转 换。
⑸ 可 通 过 在 应 用 程 序 中 嵌 入PL/SQL 事 物 处 理 块 来 改进 性 能。
⑹ 能 在 程 序 行 和 命 令 行 上 指 定所 需 要 的 预 编 译 可 选 项, 并 可 在 预 编 译 的 过 程 中 改 变它 们 的 值。
⑺ 能 全 面 检 查 嵌 入 的SQL 数 据 操纵 语 句 和PL/SQL 块 的 文 法 和 语 义。
⑻ 可 用SQL*Net 并 行 存 取 多 个 地 点的ORACLE 数 据 库。
⑼ 可 把 数 组 作 为 输 入 和 输 出
程序 变 量 使 用。
⑽ 能 对 应 用 程 序 中 的 代 码 段 进行 条 件 预 编 译。
⑾ 提 供 了 较 强 的 异 常 处 理 功能。
由 此 可 见, 通 过 预 编 译 程 序 与其 它 高 级 语 言 的 结 合, 既 可 以 利 用SQL 强 有 力 的 功 能 和灵 活 性 为 数 据 库 应 用 系 统 的 开 发 提 供 强 有 力 的 手 段,又 可 以 充 分 利 用 高 级 语 言 自 身 在 系 统 开 发 方 面 的 优势, 从 而 提 供 一 个 完 备 的 基 于ORACLE 数 据 库 应 用 程 序 的开 发 解 决 方 案。
2.2 在VC 中 使 用PRO*C
每 个PRO*C 源 文 件 一 般 由 程 序 头 和程 序 体 两 部 分 组 成。程 序 头 包 含 宿 主 变 量(SQL 语 句 中所 包 含 的 变 量) 说 明、通 讯 区 定 义 和C 外 部 表 示 符 的 说明 等。 程 序 体 一 般 是 由 若 干 函 数 组 成, 这 些 函 数 内 含有SQL 语 句( 以EXEC SQL 起 头 的 语 句)。
PRO*C 支 持 的 数 据 类 型 包 括VARCHAR2( 变 长 字 符 串)、NUMBER( 二 进 制 数)、INTGER( 有 符 号 整数)、FLOAT( 浮 点 数)、STRING( 以NULL 结 尾 的 字 符 串)、VARNUM( 变 长 二 进 制 数)、LONG( 变 长 字 符 串)、VARCHAR( 变 长