To Find Special Characters in Particular column
SELECT *
FROM table_name
WHERE RTRIM
((LTRIM
(TRANSLATE
(REPLACE (&p_column, 'A', ''),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz0123456789@#$%^&*()_+-=,!\`~{}./?:";''[]'
|| CHR (160)
|| CHR (32)
|| CHR (0)
|| CHR (253),
'A'
)
)
)
) IS NOT NULL;
Also by using below PL/SQL block you can find special characters through out the all columns in table.
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
PROCEDURE GOOEY(V_TABLE VARCHAR2, V_COLUMN VARCHAR2) IS
TYPE T_ID IS TABLE OF NUMBER;
TYPE T_DUMP IS TABLE OF VARCHAR2(20000);
TYPE T_DATA IS TABLE OF VARCHAR2(20000);
L_ID T_ID;
L_DATA T_DATA;
L_DUMP T_DUMP;
CURSOR A IS
SELECT DISTINCT COLUMN_NAME
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = V_TABLE
AND DATA_TYPE = 'VARCHAR2'
AND COLUMN_NAME NOT IN ('CUSTOMER_KEY','ADDRESS_KEY');
BEGIN
FOR X IN A LOOP
L_ID := NULL;
L_DATA := NULL;
L_DUMP := NULL;
EXECUTE IMMEDIATE 'SELECT ' || V_COLUMN || ', ' || X.COLUMN_NAME || ', ' ||
'dump(' || X.COLUMN_NAME || ')'
|| ' FROM ' || V_TABLE
|| ' WHERE RTRIM((LTRIM(REPLACE(TRANSLATE(' || X.COLUMN_NAME ||
',''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$%^&*()_+
-=,!\`~{}./?:";''''[ ]'',''A''), ''A'', '''')))) IS NOT NULL'
BULK COLLECT INTO L_ID, L_DATA, L_DUMP;
IF L_ID IS NOT NULL THEN
FOR K IN 1..L_ID.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(V_TABLE || ' - ' || X.COLUMN_NAME || ' - ' ||
TO_CHAR(L_ID(K),'999999999999'));
DBMS_OUTPUT.PUT_LINE(L_DATA(K));
DBMS_OUTPUT.PUT_LINE(L_DUMP(K));
DBMS_OUTPUT.PUT_LINE('*********************');
END LOOP;
END IF;
END LOOP;
END GOOEY;
BEGIN
GOOEY('TABLENAME1','COLUMN_NAME');
GOOEY('TABLENAME2','
COLUMN_NAME ');
GOOEY('TABLENAME3','
COLUMN_NAME ');
END;
No comments:
Post a Comment