Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - C 及 C++ 编程 » 应用程序开发 » 使用嵌入式 SQL 开发应用程序 » 使用主机变量 » 使用指示符变量

 

使用指示符变量处理 NULL

不要将 SQL 的 NULL 概念与同名的 C 语言常量相混淆。在 SQL 语言中,NULL 代表未知属性或不适用的信息。C 语言常量表示不指向内存位置的指针值。

在 SQL Anywhere 文档中使用 NULL 时,它指的是以上给出的 SQL 数据库含义。该 C 语言常量称为 null 指针(小写)。

NULL 不同于列的已定义类型的任何值。为了将 NULL 值传递到数据库或接回 NULL 结果,除了常规主机变量外还需要其它条件。指示符变量就用于此目的。

插入 NULL 时使用指示符变量

INSERT 语句可按以下方式使用指示符变量:

EXEC SQL BEGIN DECLARE SECTION;
short int employee_number;
char employee_name[50];
char employee_initials[6];
char employee_phone[15];
short int ind_phone;
EXEC SQL END DECLARE SECTION;
/* set values of empnum, empname,
   initials, and homephone */
if( /* phone number is known */ ) {
   ind_phone =  0;
} else {
   ind_phone = -1; /* NULL */
}
EXEC SQL INSERT INTO Employee
   VALUES (:employee_number, :employee_name,
   :employee_initials, :employee_phone:ind_phone );

如果指示符变量的值为 -1,则写入 NULL。如果它具有值 0,则写入 employee_phone 的实际值。

在读取 NULL 时使用指示符变量

从数据库中接收数据时也可使用指示符变量。它们用于指示读取了 NULL 值(指示符为负数)。如果从数据库中读取了 NULL 值,但未提供指示符变量,则生成 SQLE_NO_INDICATOR 错误。

有关在 SQLCA 结构中返回的错误和警告的详细信息,请参见初始化 SQL 通信区