ダミーテーブルを作成して、一致するデータがあることがわかった場合:
create table t42 (field_acct_1 number, field_acct_2 number);
insert into t42 values (123, 456);
insert into t42 values (234, 567);
insert into t42 values (678, 123);
insert into t42 values (123, 123);
コメントに記載されている最近の回答に基づいて、カーソルと一括収集(重複する値を許可するため)を使用して一致を探すことができます。
set serveroutput on
declare
type t_values is table of number;
l_values t_values;
cursor c1(cp_value number) is
select owner, table_name, column_name,
'select "' || column_name
|| '" from "' || owner ||'"."'|| table_name
|| '" where "' || column_name || '" = ' || cp_value
as query
from all_tab_columns
where column_name like '%ACC%'
and owner != 'SYS'
and data_type = 'NUMBER'
order by owner, table_name, column_name;
begin
for r1 in c1(123) loop
execute immediate r1.query bulk collect into l_values;
for i in 1..l_values.count loop
dbms_output.put_line(r1.owner
||'.'|| r1.table_name
||'.'|| r1.column_name
||':'|| l_values(i));
end loop;
end loop;
end;
/
NUMBER
時間を節約するために列を検索するように制限し、SYS
テーブルを除外しましたが、フィルターを追加して問題を発生させ、さらに実行する必要のある作業を減らすことができます。それ以外はほとんど同じ考えです。以前の回答に埋め込まれたコメントを参照して、明確でない場合に何が起こっているかを確認してください。
そしてそれは私に(owner.table.column:valueとして)与えます:
SCOTT.T42.FIELD_ACCT_1:123
SCOTT.T42.FIELD_ACCT_1:123
SCOTT.T42.FIELD_ACCT_2:123
SCOTT.T42.FIELD_ACCT_2:123