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
先建表 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
相关文章推荐
- 获取oracle raw数据类型 的字段 的值
- ORACLE中LONG类型字段的存取
- Oracle:在程序中对RAW类型字段的读写
- 运用Java如何存取Oracle中的CLOB类型字段
- Oracle long raw 类型字段读取问题
- ORACLE中LONG类型字段的存取
- oracle修改表名、列名、字段类型、添加表列、删除表列
- oracle日期时间数据类型字段更新例子
- Oracle 字段类型
- 在Oracle中申明与某个字段类型相同的变量
- Oracle的CLOB大数据字段类型操作方法
- oracle 修改字段类型
- ([Oracle][ODBC]Numeric value out of range.)Biztalk项目中Oracle适配器,目标字段有date类型时报错
- ORACLE中date类型字段的处理
- Oracle的raw数据类型
- 查询oracle表中的字段名和字段类型
- oracle date 类型字段的处理方法
- Oracle修改字段类型方法总结(转)
- Oracle修改字段类型方法总结
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题