sql >> データベース >  >> RDS >> Oracle

CLOBを使用してREPLACEを呼び出す方法(32Kを超えない)

    これは、特定の制限付きで仕事をする関数の大まかな最初のドラフトですが、まだ十分にテストされていません:

    function replace_with_clob
      (i_source in clob
      ,i_search in varchar2
      ,i_replace in clob
      ) return clob is
      l_pos pls_integer;
    begin
      l_pos := instr(i_source, i_search);
      if l_pos > 0 then
        return substr(i_source, 1, l_pos-1)
            || i_replace
            || substr(i_source, l_pos+length(i_search));
      end if;
      return i_source;
    end replace_with_clob;
    

    検索語の最初のインスタンスで1回だけ置換されます。

    declare
      v2 varchar2(32767);
      cl_small clob;
      cl_big clob;
      cl_big2 clob;
    begin
      v2 := rpad('x', 32767, 'x');
      dbms_output.put_line('v2:' || length(v2));
      cl_small := v2;
      dbms_output.put_line('cl_small:' || length(cl_small));
      cl_big := v2 || 'y' || v2;
      dbms_output.put_line('cl_big[1]:' || length(cl_big));
      cl_big2 := replace(cl_big, 'y', cl_small);
      dbms_output.put_line('cl_big[2]:' || length(cl_big2));
      cl_big2 := replace_with_clob(cl_big, 'y', cl_big); 
      dbms_output.put_line('cl_big[3]:' || length(cl_big2));
    end;
    /
    
    v2:32767
    cl_small:32767
    cl_big[1]:65535
    cl_big[2]:98301
    cl_big[3]:131069
    


    1. 新しく割り当てられたシーケンスが機能していません

    2. チャットサーバー:会話ログを保存するための最良の(最適化された)方法は何ですか

    3. mysqlデータを取得できません(CodeIgniter Selecting)

    4. MySQLの10進値を度、分、秒に変換する方法