• Pro*C/C++预编译器解析VARCHAR 类型成的一个结构
VARCHAR username[20];
转换后的结构如下:
struct
{
unsigned short len;
unsigned char arr[20];
} username;
使用VARCHAR 类型变量优点之一是通过FETCH 和SELECT 语句从Oracle 数据库中选择数据到宿主变量时,Oracle 会把数据长度记录到VARCHAR 变量的len 成员中,用户可以方便的得到数据长度,并给数据末尾置‘/0’结束符:
username.arr[username.len]=‘/0’;
• 空值处理
Ø 如果Oracle 返回空值到一个VARCHAR 宿主变量,Oracle 不改变该宿主变量原arr成员存储内容,也不改变len 成员的长度
Ø 如果设置VARCHAR 类型的宿主变量len 成员值为0,在通过其对目标数据表对应列进行INSERT 和UPDATE 时,在没有非空约束情况下,Oracle 更新对应数据库表该列数据为NULL
• 定义VARCHAR 变量必须指定其长度,类似“VARCHAR s[]”的使用是不合法的。
• 可以在一行中定义多个VARCHAR 变量:
Ø VARCHAR a[20],b[25];
• VARCHAR 变量长度可以是宏,也可以是任何在预编译过程中能识别的表达式。例如:
Ø #define MAX_LEN
Ø ...
Ø VARCHAR name[MAX_LEN];
本文介绍了在Pro*C/C++中,VARCHAR变量如何被预编译器解析为结构体,包括数据长度记录和空值处理的细节。当Oracle返回空值时,VARCHAR变量的len成员保持不变,而arr成员内容不受影响。在插入或更新数据时,设置len为0会导致Oracle将对应列设为NULL(无非空约束)。此外,VARCHAR变量需指定长度,且可以同时定义多个,其长度可以是宏或预编译时可识别的表达式。
1298

被折叠的 条评论
为什么被折叠?



