内嵌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,译注:'