您的位置:首页 > 数据库 > Oracle

Oracle: RAW类型字段的存取

2013-10-17 12:17 399 查看
下面用实例介绍一下 Oracle 的 RAW类型字段的存取。

先建表 RAW_TEST,表信息如下:

SQL> DESC RAW_TEST

Name Null? Type

----------------------------------------- -------- ----------------------------

RAW1 RAW(2000)

VARCH1 VARCHAR2(100)

SQL>

程序代码:

typedef struct RAWTYPE {

unsigned short len;

unsigned char buf[2000];

} RAWTYPE;

EXEC SQL TYPE RAWTYPE IS VARRAW(2000);

void fun(...)//函数

{

...

RAWTYPE vr1;

RAWTYPE vr2;

VARCHAR vc1[100];

VARCHAR vc2[100];

char* str = "hello!";

unsigned char data[43] = {0x29, 0x00 ,0x22 ,0x2D ,0x46 ,0x0F ,0x00 ,0x2A ,0x46 ,0x0F ,0x00 ,0x8F ,0xC2 ,0xF5 ,0x28 ,0x37 ,0x4B ,0xE4 ,0x40 ,0x29 ,0x00 ,0x00 ,0x00 ,0x10 ,0x00 ,0x00 ,0x00 ,0xD8 ,0xF6 ,0x66 ,0x1E ,0x36 ,0x90 ,0x71 ,0xCC ,0xD2 ,0x21 ,0xF9
,0x6D ,0xCE ,0xED ,0xA9 ,0x1D };

memcpy(vr1.buf, data, 43);

vr1.len = 43;

strcpy(vc1.arr, str);

vc1.len = strlen(str);

printf("\n\n.............. write RAW_TEST ..............\n");

printf("\n----- vr1 (vr1.len = %d) -----\n", vr1.len);

for(n=0; n<vr1.len; n++)

printf("%02X ", vr1.buf
);

printf("\n----- vc1 (vc1.len = %d) -----\n", vc1.len);

for(n=0; n<vc1.len; n++)

printf("%02X ", vc1.arr
);

EXEC SQL insert into RAW_TEST (RAW1, VARCH1) values (:vr1, :vc1);

EXEC SQL COMMIT WORK;

printf("\n\n.............. read RAW_TEST ..............\n");

vr2.len = vc2.len = 0;

EXEC SQL select RAW1, VARCH1 INTO :vr2, :vc2 from RAW_TEST;

printf("\n----- vr2 (vr2.len = %d) -----\n", vr2.len);

for(n=0; n<vr2.len; n++)

printf("%02X ", vr2.buf
);

printf("\n----- vc2 (vc2.len = %d) -----\n", vc2.len);

for(n=0; n<vc2.len; n++)

printf("%02X ", vc2.arr
);

printf("\n");

...

}

运行结果:

.............. write RAW_TEST ..............

----- vr1 (vr1.len = 43) -----

29 00 22 2D 46 0F 00 2A 46 0F 00 8F C2 F5 28 37 4B E4 40 29 00 00 00 10 00 00 00 D8 F6 66 1E 36 90 71 CC D2 21 F9 6D CE ED A9 1D

----- vc1 (vc1.len = 6) -----

68 65 6C 6C 6F 21

.............. read RAW_TEST ..............

----- vr2 (vr2.len = 43) -----

29 00 22 2D 46 0F 00 2A 46 0F 00 8F C2 F5 28 37 4B E4 40 29 00 00 00 10 00 00 00 D8 F6 66 1E 36 90 71 CC D2 21 F9 6D CE ED A9 1D

----- vc2 (vc2.len = 6) -----

68 65 6C 6C 6F 21
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: