I cannot see where your brand_id is getting set and why it thus works at all.
Anyway, to do it correctly you should either get the return value of the __new function call which is the brand_id and use it for the update statement, like that:
-new_data {
set brand_id [db_exec_plsql ...]
db_dml update {...}
}
or set the brand_id manually before that and explicitely pass it on to the __new function:
-new_data {
set brand_id [db_nextval acs_object_id_seq]
db_exec_plsql new {
select brand__new (
:brand_id,
:name,
....
);
}
db_dml update {...}
}