Вам необходимо использовать условное предложение USING
и немного другой запрос в FOR
l oop следующим образом:
BEGIN
FOR I IN (
SELECT TABLE_NAME
, PARTNER_COUNT
, SUPPLIER_COUNT
FROM (
SELECT TABLE_NAME
, SUM(CASE WHEN COLUMN_NAME = 'RID' THEN 1 ELSE 0 END) AS RID_COUNT
, SUM(CASE WHEN COLUMN_NAME = 'PARTNER' THEN 1 ELSE 0 END) AS PARTNER_COUNT
, SUM(CASE WHEN COLUMN_NAME = 'SUPPLIER' THEN 1 ELSE 0 END) AS SUPPLIER_COUNT
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME = 'RID'
OR COLUMN_NAME = 'PARTNER'
OR COLUMN_NAME = 'SUPPLIER'
) WHERE RID_COUNT = 1 AND PARTNER_COUNT + SUPPLIER_COUNT = 1
) LOOP
EXECUTE IMMEDIATE 'UPDATE '
|| I.TABLE_NAME
|| 'set :col_name = :newvalue where :col_name = :oldavalue and RID = :ridvalue'
USING ( DECODE(PARTNER_COUNT,1,'PARTNER','SUPPLIER'),
NEWVALUE,
DECODE(PARTNER_COUNT,1,'PARTNER','SUPPLIER'),
OLDVALUE,
RIDVALUE );
END LOOP;
END;
/