1.Создание таблицы
create table TEST_JDBC_BLOB
(
img_id VARCHAR2(32),
image CLOB
)
2. Пополнение случайными данными
declare
src clob;
dest clob;
begin
SELECT image INTO dest
FROM TEST_JDBC_BLOB
WHERE img_id = 'mockdata.csv' FOR UPDATE;
for i in 1..5000 loop
select to_clob(
to_char(i)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then round(dbms_random.value(1,1000)) end)||chr(10)
)
into src
from dual;
DBMS_LOB.APPEND(dest, src);
end loop;
COMMIT;
end;
3. чтение csv
select x.*
from test_jdbc_blob t
, xmltable('/a/b'
passing xmlparse(document
'<a><b><c>' ||
replace(
replace(
dbms_xmlgen.convert(t.image)
, ';'
, '</c><c>'
)
, chr(10)
, '</c></b><b><c>'
) ||
'</c></b></a>'
wellformed
)
columns col1 varchar2(4000) path 'c[1]'
, col2 varchar2(4000) path 'c[2]'
, col3 varchar2(4000) path 'c[3]'
, col4 varchar2(4000) path 'c[4]'
, col5 varchar2(4000) path 'c[5]'
, col6 varchar2(4000) path 'c[6]'
, col7 varchar2(4000) path 'c[7]'
) x
where t.img_id = 'mockdata.csv'
4. Генерируем 200Мб CSV. Контроль размера.
select round(s.bytes/1024/1024) as SizeCsVMb
from
user_segments s
where s.segment_name=(select l.segment_name
from user_lobs l
where l.table_name='TEST_JDBC_BLOB')
5. Количество записей и время полного чтения через ctas.
create table delit_test_numrows_time as
select x.*
from test_jdbc_blob t
, xmltable('/a/b'
passing xmlparse(document
'<a><b><c>' ||
replace(
replace(
dbms_xmlgen.convert(t.image)
, ';'
, '</c><c>'
)
, chr(10)
, '</c></b><b><c>'
) ||
'</c></b></a>'
wellformed
)
columns col1 varchar2(4000) path 'c[1]'
, col2 varchar2(4000) path 'c[2]'
, col3 varchar2(4000) path 'c[3]'
, col4 varchar2(4000) path 'c[4]'
, col5 varchar2(4000) path 'c[5]'
, col6 varchar2(4000) path 'c[6]'
, col7 varchar2(4000) path 'c[7]'
) x
where t.img_id = 'mockdata.csv'
create table TEST_JDBC_BLOB
(
img_id VARCHAR2(32),
image CLOB
)
2. Пополнение случайными данными
declare
src clob;
dest clob;
begin
SELECT image INTO dest
FROM TEST_JDBC_BLOB
WHERE img_id = 'mockdata.csv' FOR UPDATE;
for i in 1..5000 loop
select to_clob(
to_char(i)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then dbms_random.string('x',round(dbms_random.value(1,10))) end)||';'||
(case when round(dbms_random.value(1,7))!=7 then round(dbms_random.value(1,1000)) end)||chr(10)
)
into src
from dual;
DBMS_LOB.APPEND(dest, src);
end loop;
COMMIT;
end;
3. чтение csv
select x.*
from test_jdbc_blob t
, xmltable('/a/b'
passing xmlparse(document
'<a><b><c>' ||
replace(
replace(
dbms_xmlgen.convert(t.image)
, ';'
, '</c><c>'
)
, chr(10)
, '</c></b><b><c>'
) ||
'</c></b></a>'
wellformed
)
columns col1 varchar2(4000) path 'c[1]'
, col2 varchar2(4000) path 'c[2]'
, col3 varchar2(4000) path 'c[3]'
, col4 varchar2(4000) path 'c[4]'
, col5 varchar2(4000) path 'c[5]'
, col6 varchar2(4000) path 'c[6]'
, col7 varchar2(4000) path 'c[7]'
) x
where t.img_id = 'mockdata.csv'
4. Генерируем 200Мб CSV. Контроль размера.
select round(s.bytes/1024/1024) as SizeCsVMb
from
user_segments s
where s.segment_name=(select l.segment_name
from user_lobs l
where l.table_name='TEST_JDBC_BLOB')
5. Количество записей и время полного чтения через ctas.
create table delit_test_numrows_time as
select x.*
from test_jdbc_blob t
, xmltable('/a/b'
passing xmlparse(document
'<a><b><c>' ||
replace(
replace(
dbms_xmlgen.convert(t.image)
, ';'
, '</c><c>'
)
, chr(10)
, '</c></b><b><c>'
) ||
'</c></b></a>'
wellformed
)
columns col1 varchar2(4000) path 'c[1]'
, col2 varchar2(4000) path 'c[2]'
, col3 varchar2(4000) path 'c[3]'
, col4 varchar2(4000) path 'c[4]'
, col5 varchar2(4000) path 'c[5]'
, col6 varchar2(4000) path 'c[6]'
, col7 varchar2(4000) path 'c[7]'
) x
where t.img_id = 'mockdata.csv'