If you use the Oracle driver (most probably you do if you use OpenACS or ACS with Oracle) you can simply say:
db_exec_plsql add_record {
begin
1 := my_proc.new_record(
description => empty_clob()
...
);
end;
}
# Set long description (use CLOB)
db_dml set_description {
update my_table set
description = empty_clob()
where id=:id returning description into :1
} -clobs [list $description]
This way, you don't have to worry about PL/SQL's limitation of 32Kbytes for a varchar2 variable (Oracle driver takes care of that).