replace char in all database by another char

CREATE OR REPLACE PROCEDURE REPLACE_CHAR(p_tablename in varchar2 default null,
--table name
p_search in varchar2 default null,--search valuep_replace in varchar2 default null--replace value) AS
--this plsql procedure will replace the spqcific char with another specific char in specific table of the schema and in all columns ('VARCHAR2','CHAR','VARCHAR')l_columname user_tab_cols.COLUMN_NAME%type;l_data varchar2(32767);l_rowid rowid;v_sql varchar2(1000);temp varchar2(1000);
type t_data is REF CURSOR;c_data t_data;
cursor c_user_tab_columnsisselect column_namefrom user_tab_colswhere table_name = p_tablenameand data_type in ('VARCHAR2','CHAR','VARCHAR');--cursor declaration
BEGINtemp:='';v_sql:='';
OPEN c_user_tab_columns;loop
--DBMS_output.put_line( 'loop');fetch c_user_tab_columns into l_columname;EXIT WHEN c_user_tab_columns%NOTFOUND;
--DBMS_output.put_line( 'columnsname ' l_columname );
open c_data for 'select rowid,'l_columname' from 'p_tablename;--ref cursor dynamic sql within plsql
loop
fetch c_data into l_rowid,l_data;
EXIT WHEN c_data%NOTFOUND;
temp:=temp'replace(''';temp:=templ_data;temp:=temp''',''';temp:=tempp_search;temp:=temp''',''';temp:=tempp_replace;temp:=temp''')';v_sql:=v_sql'update 'p_tablename' set'l_columname'='temp' whererowid=chartorowid('''(l_rowid)''')';
execute immediate v_sql;
commit;
temp:='';v_sql:='';
--EXECUTE IMMEDIATE 'select 'l_columname' from 'p_tablename into l_data;/*dbms_output.put_line(p_tablename);dbms_output.put_line(l_columname);dbms_output.put_line(l_data);dbms_output.put_line(l_rowid);dbms_output.put_line(p_search);dbms_output.put_line(p_replace);*/
end loop;close c_data;
end loop;close c_user_tab_columns;
EXCEPTION WHEN OTHERS THEN DBMS_output.put_line(' error ' SQLERRM);
END;/

Hiç yorum yok: