一部のテーブルの一部のフィールド値をスクランブルする必要がありますが、一部のフィールド間に論理リンクがあります。
たとえば、テーブルが table t(name varchar2(30), email varchar2(60)) の場合、email の値は名前の完全な値で始まる必要があります。
Name Email
---- ----
Smith Smitha@any.com
スクランブルの後、
Name Email
---- ----
xubal xubaly@any.com
dbms_random.string 関数を使用するため、呼び出しごとに個別の値が返されます。
1回の実行で更新を行い、フィールド間の論理リンクを維持することは可能ですか? (db トリガーは使用できません)
私が試した次の 2 つのオプションでは、Oracle は名前フィールドの新しい値ではなく古い値を返します。
update t
set name=dbms_random.string('l',length(name)),
email=name || dbms_random.string('l',2) || '@any.com';
update t t1
set name=dbms_random.string('l',length(name)),
email=(select t1.name || dbms_random.string('l',2) || '@any.com'
from t t2
where t2.rowid = t1.rowid)