我在一个程序中有以下循环来扰乱PII。问题是IV_USER存储为带有名称的点的James.T.Sanders。这导致我得到ORA-00904:"詹姆斯"。" T"。"桑德斯":无效的标识符
有解决方法吗?
OPEN user_list FOR 'select IV_USER FROM EXT_USER.PORTAL_ACCOUNTS';
LOOP
FETCH user_list INTO user_list_rec;
execute immediate 'update EXT_USER.PORTAL_ACCOUNTS set PERSON_ID=:ssan_new WHERE IV_USER='||user_list_rec.IV_USER||' ' USING ssan_new;
ssan_new := ssan_new + 1;
END LOOP;
如果需要进一步澄清,请告诉我。
答案 0 :(得分:1)
我认为WHERE
条件中的作业错过了单一行情!
由于Query构造为String,因此分配VARCHAR变量只需粘贴WHERE IV_USER = James.T.Sanders
之类的值即可。它必须用作绑定变量或用单引号括起来!
OPEN user_list FOR 'select IV_USER FROM EXT_USER.PORTAL_ACCOUNTS';
LOOP
FETCH user_list INTO user_list_rec;
execute immediate 'update EXT_USER.PORTAL_ACCOUNTS set PERSON_ID=:ssan_new WHERE IV_USER='''||user_list_rec.IV_USER||''' ' USING ssan_new;
ssan_new := ssan_new + 1;
END LOOP;
OR(没有动态 SQL for UPDATE,Ofcourse可以在没有动态SQL的情况下使用许多解决方案)
OPEN user_list FOR 'select IV_USER FROM EXT_USER.PORTAL_ACCOUNTS';
LOOP
FETCH user_list INTO user_list_rec;
update EXT_USER.PORTAL_ACCOUNTS set PERSON_ID = ssan_new WHERE IV_USER = user_list_rec.IV_USER;
ssan_new := ssan_new + 1;
END LOOP;