RAW类型字段如何在proc程序里读取?
哪有示例代码?在网上没搜到。

解决方案 »

  1.   

    utl_raw.cast_to_varchar2
    utl_raw.cast_to_raw
      

  2.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
      

  3.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
      

  4.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    非常感谢!
    再顺便问一下,对 VARRAW 和 LONG RAW 类型的字段怎么读取?
      

  5.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    非常感谢!
    再顺便问一下,对 VARRAW 和 LONG RAW 类型的字段怎么读取?
    RAW只是一种外部类型,其内部存储是VARRAW;
    LONG RAW,去这个包utl_raw里看看吧;
    另外oracle建议 最好不用long 而用blob代替
      

  6.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    非常感谢!
    再顺便问一下,对 VARRAW 和 LONG RAW 类型的字段怎么读取?
    RAW只是一种外部类型,其内部存储是VARRAW;
    LONG RAW,去这个包utl_raw里看看吧;
    另外oracle建议 最好不用long 而用blob代替
    谢谢,给分。
      

  7.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    奇怪,为什么读出来有的数据变了,而且长度也变长了?
      

  8.   


    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    奇怪,为什么读出来有的数据变了,而且长度也变长了?
    不太明白,比如表 T 有RAW类型字段 RWATEST那么写入和读取就可以像下面这样么?VARCHAR2   vch;
    insert into T values (utl_raw.cast_to_raw(:vch));
    select utl_raw.cast_to_varchar2(RAWTEST) INTO :vch from T;   
    是的
    VARCHAR  vch[2000];
    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(vch.arr, data, 43);
    vch.len = 43;
    EXEC SQL insert into T values (utl_raw.cast_to_raw(:vch));
    EXEC SQL COMMIT WORK;查看数据库,发现写入的数据竟然是下面这些,数据长度增多了,很多内容也变了,为什么?29 00 22 2D 46 0F 00 2A 46 0F 00 EF BF BD EF BF BD 28 37 4B EF BF BD 00 00 00 10 00 00 00 EF BF BD 66 1E 36 EF BF BD 71 EF BF BD 21 EF BF BD 6D EF BF BD EF BF BD 1D