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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere 嵌入式 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; 
/*
This program fills in the employee number, 
name, initials, and phone number.
*/
if( /* Phone number is unknown */ ) {
 ind_phone = -1;
} else {
 ind_phone = 0;
}
EXEC SQL INSERT INTO Employees
 VALUES (:employee_number, :employee_name,
 :employee_initials, :employee_phone:ind_phone );

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

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

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