Create this procedure in ADMIN user
CREATE OR REPLACE PROCEDURE SEARCH_TEXT_IN_SCHEMAS (
p_owner_like IN VARCHAR2, -- e.g. 'STAR%' or 'APP%'
p_text IN VARCHAR2 -- e.g. 'SK1'
)
AS
v_sql VARCHAR2(4000);
v_cursor SYS_REFCURSOR;
v_table VARCHAR2(200);
v_column VARCHAR2(200);
v_value VARCHAR2(4000);
BEGIN
DBMS_OUTPUT.PUT_LINE('Searching for "' || p_text || '" in owners like "' || p_owner_like || '"');
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------');
FOR owner_rec IN (
SELECT DISTINCT owner
FROM all_tab_columns
WHERE owner LIKE UPPER(p_owner_like)
AND data_type IN ('VARCHAR2', 'CHAR', 'NVARCHAR2', 'NCHAR')
ORDER BY owner
)
LOOP
DBMS_OUTPUT.PUT_LINE('=== Checking Schema: ' || owner_rec.owner || ' ===');
FOR rec IN (
SELECT table_name, column_name
FROM all_tab_columns
WHERE owner = owner_rec.owner
AND data_type IN ('VARCHAR2', 'CHAR', 'NVARCHAR2', 'NCHAR')
ORDER BY table_name, column_name
)
LOOP
v_sql := 'SELECT ''' || rec.table_name || ''' AS table_name, ' ||
'''' || rec.column_name || ''' AS column_name, ' ||
rec.column_name || ' AS match_value ' ||
'FROM "' || owner_rec.owner || '"."' || rec.table_name || '" ' ||
'WHERE LOWER(' || rec.column_name || ') LIKE :1';
BEGIN
OPEN v_cursor FOR v_sql USING '%' || LOWER(p_text) || '%';
LOOP
FETCH v_cursor INTO v_table, v_column, v_value;
EXIT WHEN v_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(
'OWNER: ' || owner_rec.owner ||
' | TABLE: ' || v_table ||
' | COLUMN: ' || v_column ||
' | VALUE: ' || SUBSTR(v_value, 1, 200)
);
END LOOP;
CLOSE v_cursor;
EXCEPTION
WHEN OTHERS THEN
IF v_cursor%ISOPEN THEN
CLOSE v_cursor;
END IF;
-- Skip inaccessible tables or data conversion issues
NULL;
END;
END LOOP;
END LOOP;
END;
/
Run this below in ADMIN user
SET SERVEROUTPUT ON SIZE UNLIMITED;
EXEC SEARCH_TEXT_IN_SCHEMAS('Search_in_Schema_like%', 'text_to_search');
