here it is

create or replace function build_update(p_table_name varchar2) return varchar2
AS
l_string varchar2(1000);
l_owner varchar2(36);
l_table_name varchar2(36);
begin
l_string := '(';
for i in (select * from user_tab_columns where table_name = p_table_name )
loop
l_string := l_string || i.column_name||',';
end loop;
l_string := substr(l_string, 1, instr(l_string, ',', -1)-1)||')';
return l_string;
end;
/


then in my main proc


var_update := build_update(p_table_name);
....
FOR x IN (SELECT var_col_1 FROM user_tab_cols where table_name=p_table_name)
LOOP
EXECUTE IMMEDIATE ' UPDATE ' || p_table_name || '@dblink SET ' || var_update || ' = ' || var_update || ' FROM ' ||
p_table_name || ' WHERE ' || var_col_1 || ' = ' || x.var_col_1 || ')';


so that is what I am working on at the moment. I will be adding the logic to selectively update the records I want but tks pando for getting me started in dynamically building the string.