Subject | Re: [firebird-support] Problems with default values... |
---|---|
Author | Helen Borrie |
Post date | 2012-09-13T03:05:15Z |
At 12:56 PM 13/09/2012, you wrote:
[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
>Hello I'm having a problems with a couple of columns, when I try to set a default value here is my code...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.
>
>
>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?
[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