Oracle Pro*C/C++ (五):嵌入式SQL编程指南

1,206 阅读3分钟

C语言开发过程中,需要对数据库进行操作,使用 Oracle 数据库一般会采用Oracle Pro*C/C++ 预编译器。

本文章参考Oracle官方文档和自我实践,实验环境为 RHEL7 和 Oracle19c,详细介绍 Oracle Pro*C/C++ 预编译器,了解它在开发操作 Oracle 数据的应用程序中的作用,并了解它使您的应用程序能够做什么,具体如使用。

本章介绍嵌入式 SQL 语法、编码约定以及特定于 C 的功能和限制。


声明

一个 DECLARE SELECT 包含宿主变量声明和的形式为:

EXEC SQL SELECT ENAME, SAL 
    INTO :emp_name, :salary  -- 宿主变量
    FROM EMP 
    WHERE DEPTNO = :dept_number; 

声明部分以声明开头:

EXEC SQL BEGIN DECLARE SECTION;

并以声明结尾:

EXEC SQL END DECLARE SECTION;

在这两个语句之间只允许以下内容:

  • 宿主变量和指标变量声明
  • 非宿主 C/C++ 变量
  • EXEC SQL DECLARE 语句
  • EXEC SQL INCLUDE 语句
  • EXEC SQL VAR 语句
  • EXEC SQL TYPE 语句
  • EXEC ORACLE 语句
  • C/C++ 注释

宿主变量名称

宿主变量名称可以由大写或小写字母、数字和下划线组成,但必须以字母开头, 可以是任意长度,但只有前 31 个字符对 Pro*C/C++ 有意义。 C 编译器或链接器可能需要更短的最大长度,因此请查看 C 编译器用户指南。

为了可移植性,英爱将宿主变量名称的长度限制为 18 个或更少的字符(SQL 标准规定的长度)。

常数

一个大号或升后缀指定长整数常数,ü或ü后缀指定的无符号的整数常数,0X或0X前缀指定一个十六进制整数常数,和一个˚F或˚F后缀指定一个浮子浮点常数。这些形式不允许再SQL语句中使用。

跨行延续

您可以从一行到下一行继续 SQL 语句。必须使用反斜杠 () 将字符串文字从一行延续到下一行,如以下示例所示:

EXEC SQL INSERT INTO dept (deptno, dname) VALUES (50, 'PURCHAS\ 
ING');

在这种情况下,预编译器将反斜杠视为连续字符。

运算符

逻辑运算符和“等于”关系运算符在 C 和 SQL 中是不同的,如下表所示。这些C运算不会允许在SQL语句中使用:

SQL运算符C 运算符
不是
&&
或者||
===

下面的C运算符也不允许在SQL语句中使用:

类型C 运算符
地址&
位运算&, |, ^, ~
复合赋值+=、-=、*=
条件赋值?:
递减--
递增++
间接*
模量%
转移>>,<<

MAXLITERAL 默认值

预编译器选项 MAXLITERAL 允许您指定预编译器生成的字符串文字的最大长度。

MAXLITERAL 默认值为 1024。如果需要,指定一个较小的值。例如,如果您的 C 编译器无法处理长度超过 512 个字符的字符串文字,则指定 MAXLITERAL=512。检查C 编译器用户指南。