At 12:56 PM 13/09/2012, you wrote:
>Hello I'm having a problems with a couple of columns, when I try to set a 
>default value here is my code...
>
>
>alter table cboo_pedido
>add fec_uactu date default 'today' not null,
>add hor_uactu varchar(2) default extract(hour from cast('now' as date)) not 
>null
>
>The first column (fec_uactu) goes OK, but on the second column I get this 
>error: 
>        Invalid token.
>        SQL error code = -104.
>        Token unknown - line 3, char 34.
>        extract.
>
>How can I add the second column with the required default?

Are you confusing a COMPUTED BY column with a defaulted column?   The DEFAULT 
attribute of a column can be a constant, a context variable or a predefined 
date literal (like your column FEC_UACTU) but not an expression.  

[FWIW, your expression for HOR_ACTU isn't valid, anyhow.  You can't extract an 
HOUR time-part from a DATE type.  It seems bizarre to be trying to cast the 
date literal 'NOW' as a date under any circumstances, since you have both 
CURRENT_DATE and 'TODAY' available.]

One way to get this data on the records is to make HOR_ACTU nullable and use a 
BEFORE INSERT OR UPDATE trigger to ensure you always get a default value when 
HOR_ACTU is null:

create trigger some_name for cboo_pedido
active before insert or update as
begin
  if (new.hor_actu is null) then
    new.hor_actu = cast(extract (hour from current_timestamp) as varchar(2));
end

[I would also suggest reviewing the usefulness of storing HOR_ACTU as a 
varchar.  Do you really want '12' to be earlier than '2' when sorting by hour 
of day?]

./heLen


Reply via email to