【问题标题】:Prepare test data on Oracle with blob column使用 blob 列在 Oracle 上准备测试数据
【发布时间】:2017-08-11 20:39:29
【问题描述】:

最近需要对oracle 10g做一些性能测试,情况是我需要准备尽可能多的有blob列的记录,并且blob列至少要包含10kbs的数据。

如何自动生成测试数据?比如说,10,000 条记录?

【问题讨论】:

    标签: oracle blob


    【解决方案1】:

    如果不关心LOB数据的内容是否相同,可以使用如下(随机创建一个10000字节的lob值):

    declare
       v_clob        clob;
       v_blob        blob;
       v_dest_offset integer := 1;
       v_src_offset  integer := 1;
       v_warn        integer;
       v_ctx         integer := dbms_lob.default_lang_ctx;
    begin
       for idx in 1..5
       loop
         v_clob := v_clob || dbms_random.string('x', 2000);
       end loop;
       dbms_lob.createtemporary( v_blob, false );
       dbms_lob.converttoblob(v_blob,
                              v_clob,
                              dbms_lob.lobmaxsize,
                              v_dest_offset,
                              v_src_offset,
                              dbms_lob.default_csid,
                              v_ctx,
                              v_warn);
       insert into blob_test (id, data)
         select rownum, v_blob from dual
         connect by level <= 10000;
    end;
    /
    

    在这里查看一个示例会话:

    SQL> create table blob_test (id number primary key, data blob);
    
    Table created.
    
    SQL> declare
      2    v_clob        clob;
      3    v_blob        blob;
      4    v_dest_offset integer := 1;
      5    v_src_offset  integer := 1;
      6    v_warn        integer;
      7    v_ctx         integer := dbms_lob.default_lang_ctx;
      8  begin
      9    for idx in 1..5
     10    loop
     11      v_clob := v_clob || dbms_random.string('x', 2000);
     12    end loop;
     13    dbms_lob.createtemporary( v_blob, false );
     14    dbms_lob.converttoblob(v_blob,
     15                           v_clob,
     16                            dbms_lob.lobmaxsize,
     17                           v_dest_offset,
     18                           v_src_offset,
     19                           dbms_lob.default_csid,
     20                           v_ctx,
     21                           v_warn);
     22
     23    insert into blob_test (id, data)
     24    select rownum, v_blob
     25      from dual
     26     connect by level <= 10000;
     27
     28  end;
     29  /
    
    PL/SQL procedure successfully completed.
    
    
    SQL> select count(*) , max(length(data)) from blob_test;
    
      COUNT(*) MAX(LENGTH(DATA))
    ---------- -----------------
         10000             10000
    

    如果您想要不同的数据,您可以生成并在循环中插入v_lob

    【讨论】:

    • 您介意我重新格式化没有行号的实际块,以便更容易粘贴吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2017-09-09
    • 2014-07-06
    • 1970-01-01
    • 2015-12-30
    • 2017-04-23
    • 2017-09-07
    相关资源
    最近更新 更多