PROC基础知识之VARCHAR变量

本文介绍了在Pro*C/C++中,VARCHAR变量如何被预编译器解析为结构体,包括数据长度记录和空值处理的细节。当Oracle返回空值时,VARCHAR变量的len成员保持不变,而arr成员内容不受影响。在插入或更新数据时,设置len为0会导致Oracle将对应列设为NULL(无非空约束)。此外,VARCHAR变量需指定长度,且可以同时定义多个,其长度可以是宏或预编译时可识别的表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值