我想遍历所有列来查找和替换特定字符。这是我的pl/sql块:遍历所有列以查找并替换字符
Declare
match_count Number:=0;
v_search_string VARCHAR2(4000) := '%ي%';
BEGIN
FOR t IN
(SELECT owner,
table_name,
column_name
FROM all_tab_columns
WHERE (SUBSTR(table_name,1,2)='PN'
OR (SUBSTR(table_name,1,2) ='CD'
AND owner ='PNET_USER'))
AND (data_type ='VARCHAR2'
OR data_type ='CLOB')
)
LOOP
BEGIN
EXECUTE IMMEDIATE 'SELECT count(*) FROM '||t.owner || '.' || t.table_name|| ' WHERE '||t.column_name||' LIKE :1' INTO match_count USING v_search_string;
IF match_count > 0 THEN
dbms_output.put_line(t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count);
--EXECUTE IMMEDIATE 'UPDATE '||t.table_name||' SET '||t.column_name||'=replace()'
END IF;
END;
END LOOP;
它工作正常,并打印具有无效字符的列的名称。但我不知道如何替换角色。我如何获得t.column_name
的值,替换无效字符,然后更新t.table_name
?
对不起,我想我无法解释清楚的问题。我不想在列名中搜索无效字符。我需要更换列数据。 – danrah
Ok现在编辑... –
我得到:ORA-01779:无法修改映射到非密钥保存表的列 – danrah