Tuesday, November 20, 2012

How to find Special Characters from the table



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