【www.bbyears.com--Oracle教程】
代码如下
createorreplaceprocedurePROC_testis
--Description:删除字段中的指定字符(回车chr(13)、换行chr(10))
--By LiChao
--Date:2016-03-01
colnamevarchar(20);--列名
cnt number;--包含换行符的列的行数
v_sql varchar(2000);--动态SQL变量
begin
--读取表中的列
forcolin(selectcolumn_name
fromuser_tab_columns
wheretable_name ='TEMP') loop
colname := col.column_name;
--替换换行符chr(10)
v_sql :='select count(1) from temp where instr('|| colname ||
',chr(10))>0 '
EXECUTEIMMEDIATE V_SQL
intocnt;
if cnt > 0then
v_sql :='update temp set '|| colname ||'=trim(replace('|| colname ||
',chr(10),''''))'||'where instr('|| colname ||
',chr(10))>0 '
EXECUTEIMMEDIATE V_SQL;
commit;
endif;
--替换回车符chr(13)
v_sql :='select count(1) from temp where instr('|| colname ||
',chr(13))>0 '
EXECUTEIMMEDIATE V_SQL
intocnt;
if cnt > 0then
v_sql :='update temp set '|| colname ||'=trim(replace('|| colname ||
',chr(13),''''))'||'where instr('|| colname ||
',chr(13))>0 '
EXECUTEIMMEDIATE V_SQL;
commit;
endif;
--替换'|' chr(124) 为'*' chr(42)
v_sql :='select count(1) from temp where instr('|| colname ||
',chr(124))>0 '
EXECUTEIMMEDIATE V_SQL
intocnt;
if cnt > 0then
v_sql :='update temp set '|| colname ||'=replace('|| colname ||
',chr(124),chr(42))'||'where instr('|| colname ||
',chr(124))>0 '
EXECUTEIMMEDIATE V_SQL;
commit;
endif;
endloop;
endPROC_test;
/