【问题标题】:Converting small-ish Oracle long raw values to other types将小型 Oracle 长原始值转换为其他类型
【发布时间】:2009-01-08 21:35:48
【问题描述】:

我有一个 Oracle 表,其中包含一个 LONG RAW 类型的字段,该字段包含 ASCII 字符数据。如何编写一个查询或视图,将其转换为更容易使用的字符串?这些总是单字节字符,FWIW。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    也许

    select ...., to_lob(long_raw) from old_table

    (http://www.psoug.org/reference/convert_func.html)

    UTL_RAW.CAST_TO_VARCHAR2(b) 
    

    (http://www.dbasupport.com/forums/showthread.php?t=5342).

    【讨论】:

      【解决方案2】:

      我找到了这句话:

      在 Oracle9i 中,您甚至可以:

      alter table old_table modify ( c clob );

      转换它。

      请看这里:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1037232794454

      编辑

      varchar2 列的最大长度为 4000。是不是太短了?

      【讨论】:

      • 一个现有且相当脆弱的应用程序当前使用此表,因此我宁愿不修改现有表,以免撞倒纸牌屋。
      【解决方案3】:

      我发现这适用于 CLOB 数据类型。我相信 LOB 类型也是如此。

      create or replace function lob2char(clob_col clob) return varchar2 IS
      buffer varchar2(4000);
      amt BINARY_INTEGER := 4000;
      pos INTEGER := 1;
      l clob;
      bfils bfile;
      l_var varchar2(4000):='';
      begin
      LOOP
      if dbms_lob.getlength(clob_col)<=4000 THEN
      dbms_lob.read (clob_col, amt, pos, buffer);
      l_var := l_var||buffer;
      pos:=pos+amt;
      ELSE
      l_var:= 'Cannot convert.  Exceeded varchar2 limit';
      exit;
      END IF;
      END LOOP;
      return l_var;
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
      return l_var;
      END;
      
      
      
      INSERT INTO NEWTABLE (NEWCOLUMN) SELECT RTRIM(lob2char(OLDCOLUMN)) FROM OLDTABLE;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多