重複の可能性:
すべてのテーブルのすべてのフィールドで特定の値
を検索(Oracle)Oracleのスキーマ全体のすべてのフィールドで特定の文字列を検索します
私はこれを持っています:
select * from
{select table_name
from user_tab_columns
where data_type = 'VARCHAR2')
しかし、もちろん、それは機能していません。SQL Developerのみを使用しており、続行する方法がわかりません。
上記のクエリで各テーブルからすべてを選択するように求めていると思いましたが、それは正しくありません。私はSOについていくつかの答えを見ましたが、彼らは助けにはなりませんでした。column_name
だけでなくuser_tab_columns
、列の値が必要です
「JONES」という名前がデータベースのどこにあるかを本当に知りたいだけです。テーブルや列はわかりませんが、値がどこかにあるだけです。
ありがとう。
次のコードを実行したとき:
すべてのテーブルのすべてのフィールドで特定の値を検索(Oracle)
SET SERVEROUTPUT ON SIZE 100000
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE owner <> 'SYS' and data_type LIKE '%CHAR%') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
' WHERE '||t.column_name||' = :1'
INTO match_count
USING 'JONES%';
IF match_count > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
私が受け取った:
Error report:
ORA-00920: invalid relational operator
ORA-06512: at line 8
00920. 00000 - "invalid relational operator"
*Cause:
*Action:
<>
編集:何らかの理由で、オラクルは同様に試みられた等しくないことを好みません!=
。
編集:私がちょうど実行する場合:
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE owner != 'SYS' and data_type LIKE '%CHAR%'
エラーは発生しません。
なしで実行するとowner != 'SYS'
、特権が不十分になります(ただし、dbを所有しています)
実行を削除し、またはowner != 'SYS'
で元に戻し、失敗します!=
<>
編集:CONNECT BY
現時点で試してみてください