Pro*C介绍 内嵌SQL



概要

内嵌SQL是结合高级语言如C/C++的计算能力和SQL数据库处理能力的一种方法。它允许你在程序中执行任意的SQL语句。Oracle的嵌入SQL环境称为Pro*C。

Pro*C程序分两步编译。首先,Pro*C的预编译器识别出嵌入在程序中的SQL语句,并将这些语句转换为对SQL运行时库(SQL runtime library)中功能(functions)的适当调用。输出是纯C/C++代码和未被处理的纯C/C++代码。然后,用常规C/C++编译器编译代码并生成可执行程序。更详细的内容请参考Demo程序

Demo程序

Pro*C语法


SQL

所有SQL语句都要以EXEC SQL开始,并用分号";"结束。SQL语句可以放置在C/C++块中的任何地方,但可执行的(SQL)语句应该在声明语句后面。例:

{
    int a;
    
    EXEC SQL SELECT salary INTO :a
             FROM Employee
             WHERE SSN=876543210;
    
    printf("The salary is %d
", a);
    
}


预处理指令

能够在Pro*C中正常工作的C/C++预处理指令是#include#if。Pro*C不能识别#define。下面的代码是错误的:

#define THE_SSN 876543210

EXEC SQL SELECT salary INTO :a
         FROM Employee
         WHERE SSN = THE_SSN;

语句标号

可以在SQL中跳转到C/C++标记

    EXEC SQL WHENEVER SQLERROR GOTO error_in_SQL;
    
error_in_SQL:
    

我们会在后面的错误处理一节中讲到有关WHENEVER的含意。

错误处理一节中讲到有关WHENEVER的含意。

宿主变量


基础

宿主变量是连接宿主程序与数据库的关键。宿主变量表达式必须视为(resolve to)左值(能被赋值)。你可以像声明普通C变量一样,按着C的语法规则声明宿主变量。宿主变量的声明可以放置在任何C变量声明可以放置的地方。(C++用户需要使用"DECLARE SECTION";参考C++ Users) Oracle可以使用的C数据类型包括:

C++ Users) Oracle可以使用的C数据类型包括:
  • char
  • char[n]
  • int
  • short
  • long
  • float
  • double
  • VARCHAR[n]- 它是能被Pro*C的预编译器识别的预处理类型(psuedo-type)。它用来 表示由空白填充(blank-padded,译注:'