Unless explicitly mentioned otherwise in an “Available in” section, context variables are available in at least DSQL and PSQL.Availability in ESQL is — bar some exceptions — not tracked by this Language Reference.
Unless explicitly mentioned otherwise in an “Available in” section, context variables are available in at least DSQL and PSQL.Availability in ESQL is — bar some exceptions — not tracked by this Language Reference.
CURRENT_CONNECTION
Unique identifier of the current connection.
BIGINT
CURRENT_CONNECTION
Its value is derived from a counter on the database header page, which is incremented for each new connection.When a database is restored, this counter is reset to zero.
select current_connection from rdb$database
execute procedure P_Login(current_connection)
INSERTING
Indicates if the trigger fired for an INSERT
operation
PSQL — triggers only
BOOLEAN
INSERTING
Intended for use in multi-action triggers.
if (inserting or updating) then
begin
if (new.serial_num is null) then
new.serial_num = gen_id(gen_serials, 1);
end
LOCALTIME
Current server time in the session time zone, without time zone information
TIME WITHOUT TIME ZONE
LOCALTIME [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
The optional precision argument is not supported in ESQL.
Parameter | Description |
---|---|
precision |
Precision.The default value is 0.Not supported in ESQL |
LOCALTIME
returns the current server time in the session time zone.The default is 0 decimals, i.e. seconds precision.
Note
|
|
select localtime from rdb$database
-- returns e.g. 14:20:19.0000
select localtime(2) from rdb$database
-- returns e.g. 14:20:23.1200
LOCALTIMESTAMP
Current server time and date in the session time zone, without time zone information
TIMESTAMP WITHOUT TIME ZONE
LOCALTIMESTAMP [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
The optional precision argument is not supported in ESQL.
Parameter | Description |
---|---|
precision |
Precision.The default value is 3.Not supported in ESQL |
LOCALTIMESTAMP
returns the current server date and time in the session time zone.The default is 3 decimals, i.e. milliseconds precision.
Note
|
|
select localtimestamp from rdb$database
-- returns e.g. 2008-08-13 14:20:19.6170
select localtimestamp(2) from rdb$database
-- returns e.g. 2008-08-13 14:20:23.1200
NEW
Record with the inserted or updated values of a row
PSQL — triggers only,
DSQL — RETURNING
clause of UPDATE
, UPDATE OR INSERT
and MERGE
Record type
NEW.column_name
Parameter | Description |
---|---|
column_name |
Column name to access |
NEW
contains the new version of a database record that has just been inserted or updated.NEW
is read-only in AFTER
triggers.
Note
|
In multi-action triggers |
'NOW'
Current date and/or time in cast context
CHAR(3)
, or depends on explicit CAST
'NOW'
is not a variable, but a string literal or datetime mnemonic.It is, however, special in the sense that when you CAST()
it to a datetime type, you will get the current date and/or time.If the datetime type has a time component, the precision is 3 decimals, i.e. milliseconds.'NOW'
is case-insensitive, and the engine ignores leading or trailing spaces when casting.
Note
|
|
select 'Now' from rdb$database
-- returns 'Now'
select cast('Now' as date) from rdb$database
-- returns e.g. 2008-08-13
select cast('now' as time) from rdb$database
-- returns e.g. 14:20:19.6170
select cast('NOW' as timestamp) from rdb$database
-- returns e.g. 2008-08-13 14:20:19.6170
OLD
Record with the initial values of a row before update or delete
PSQL — triggers only,
DSQL — RETURNING
clause of UPDATE
, UPDATE OR INSERT
and MERGE
Record type
OLD.column_name
Parameter | Description |
---|---|
column_name |
Column name to access |
OLD
contains the existing version of a database record just before a deletion or update.The OLD
record is read-only.
Note
|
In multi-action triggers |
RESETTING
Indicates if the trigger fired during a session reset
PSQL — triggers only
BOOLEAN
RESETTING
Its value is TRUE
if session reset is in progress and FALSE
otherwise.Intended for use in ON DISCONNECT
and ON CONNECT
database triggers to detect an ALTER SESSION RESET
.
ROW_COUNT
Number of affected rows of the last executed statement
PSQL
INTEGER
ROW_COUNT
The ROW_COUNT
context variable contains the number of rows affected by the most recent DML statement (INSERT
, UPDATE
, DELETE
, SELECT
or FETCH
) in the current PSQL module.
SELECT
and FETCH
After a singleton SELECT
, ROW_COUNT
is 1 if a data row was retrieved and 0 otherwise.
In a FOR SELECT
loop, ROW_COUNT
is incremented with every iteration (starting at 0 before the first).
After a FETCH
from a cursor, ROW_COUNT
is 1 if a data row was retrieved and 0 otherwise.Fetching more records from the same cursor does not increment ROW_COUNT
beyond 1.
Note
|
|
update Figures set Number = 0 where id = :id;
if (row_count = 0) then
insert into Figures (id, Number) values (:id, 0);
SQLCODE
SQLCODE of the Firebird error in a WHEN … DO
block
PSQL
2.5.1
INTEGER
SQLCODE
In a “WHEN … DO
” error handling block, the SQLCODE
context variable contains the numeric value of the current SQL error code.SQLCODE
is non-zero in WHEN … DO
blocks, if the current error has a SQL error code.Outside error handlers, SQLCODE
is always 0.Outside PSQL, it doesn’t exist at all.
Warning
|
|
when any
do
begin
if (sqlcode <> 0) then
Msg = 'An SQL error occurred!';
else
Msg = 'Something bad happened!';
exception ex_custom Msg;
end
SQLSTATE
SQLSTATE code of the Firebird error in a WHEN … DO
block
PSQL
CHAR(5)
SQLSTATE
In a “WHEN … DO
” error handler, the SQLSTATE
context variable contains the 5-character, SQL-compliant status code of the current error.Outside error handlers, SQLSTATE
is always '00000'
.Outside PSQL, it is not available at all.
Note
|
|
when any
do
begin
Msg = case sqlstate
when '22003' then 'Numeric value out of range.'
when '22012' then 'Division by zero.'
when '23000' then 'Integrity constraint violation.'
else 'Something bad happened! SQLSTATE = ' || sqlstate
end;
exception ex_custom Msg;
end
CURRENT_DATE
Current server date in the session time zone
DATE
CURRENT_DATE
Note
|
Within a PSQL module (procedure, trigger or executable block), the value of |
select current_date from rdb$database
-- returns e.g. 2011-10-03
'TODAY'
Current date in cast context
CHAR(5)
, or depends on explicit CAST
'TODAY'
is not a variable, but a string literal or date mnemonic.It is, however, special in the sense that when you CAST()
it to a date/time type, you will get the current date.If the target datetime type has a time component, it will be set to zero.'TODAY'
is case-insensitive, and the engine ignores leading or trailing spaces when casting.
Note
|
|
select 'Today' from rdb$database
-- returns 'Today'
select cast('Today' as date) from rdb$database
-- returns e.g. 2011-10-03
select cast('TODAY' as timestamp) from rdb$database
-- returns e.g. 2011-10-03 00:00:00.0000
'TOMORROW'
Tomorrow’s date in cast context
CHAR(8)
, or depends on explicit CAST
'TOMORROW'
is not a variable, but a string literal.It is, however, special in the sense that when you CAST()
it to a date/time type, you will get the date of the next day.See also [fblangref50-contextvars-today].
select 'Tomorrow' from rdb$database
-- returns 'Tomorrow'
select cast('Tomorrow' as date) from rdb$database
-- returns e.g. 2011-10-04
select cast('TOMORROW' as timestamp) from rdb$database
-- returns e.g. 2011-10-04 00:00:00.0000
UPDATING
Indicates if the trigger fired for an UPDATE
operation
PSQL — triggers only
BOOLEAN
UPDATING
Intended for use in multi-action triggers.
if (inserting or updating) then
begin
if (new.serial_num is null) then
new.serial_num = gen_id(gen_serials, 1);
end
'YESTERDAY'
Yesterday’s date in cast context
CHAR(9)
, or depends on explicit CAST
'YESTERDAY'
is not a variable, but a string literal.It is, however, special in the sense that when you CAST()
it to a date/time type, you will get the date of the day before.See also [fblangref50-contextvars-today].
select 'Yesterday' from rdb$database
-- returns 'Yesterday'
select cast('Yesterday as date) from rdb$database
-- returns e.g. 2011-10-02
select cast('YESTERDAY' as timestamp) from rdb$database
-- returns e.g. 2011-10-02 00:00:00.0000
USER
Name of the user of the current connection
VARCHAR(63)
USER
USER
is equivalent to (or, alias of) [fblangref50-contextvars-current-user].
create trigger bi_customers for customers before insert as
begin
New.added_by = USER;
New.purchases = 0;
end
CURRENT_ROLE
Current explicit role of the connection
VARCHAR(63)
CURRENT_ROLE
CURRENT_ROLE
is a context variable containing the explicitly specified role of the currently connected user.If there is no explicitly specified role, CURRENT_ROLE
is 'NONE'
.
CURRENT_ROLE
always represents a valid role or 'NONE'
.If a user connects with a non-existing role, the engine silently resets it to 'NONE'
without returning an error.
Note
|
Roles that are active by default and not explicitly specified on connect or using |
if (current_role <> 'MANAGER')
then exception only_managers_may_delete;
else
delete from Customers where custno = :custno;
CURRENT_TIME
Current server time in the session time zone, with time zone information
TIME WITH TIME ZONE
Caution
|
Data type changed in Firebird 4.0 from |
CURRENT_TIME [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
The optional precision argument is not supported in ESQL.
Parameter | Description |
---|---|
precision |
Precision.The default value is 0.Not supported in ESQL |
The default is 0 decimals, i.e. seconds precision.
Note
|
|
Warning
|
CURRENT_TIME and Firebird Time Zone SupportFirebird 4.0 added support for time zones.As part of this support, an incompatibility with the Since Firebird 4.0, In Firebird 5.0, |
select current_time from rdb$database
-- returns e.g. 14:20:19.0000
select current_time(2) from rdb$database
-- returns e.g. 14:20:23.1200
CURRENT_TIMESTAMP
Current server date and time in the session time zone, with time zone information
TIMESTAMP WITH TIME ZONE
Caution
|
Data type changed in Firebird 4.0 from |
CURRENT_TIMESTAMP [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
The optional precision argument is not supported in ESQL.
Parameter | Description |
---|---|
precision |
Precision.The default value is 3.Not supported in ESQL |
The default is 3 decimals, i.e. milliseconds precision.
Note
|
|
Warning
|
CURRENT_TIMESTAMP and Firebird Time Zone SupportFirebird 4.0 added support for time zones.As part of this support, an incompatibility with the Since Firebird 4.0, In Firebird 5.0, |
select current_timestamp from rdb$database
-- returns e.g. 2008-08-13 14:20:19.6170
select current_timestamp(2) from rdb$database
-- returns e.g. 2008-08-13 14:20:23.1200
CURRENT_TRANSACTION
Unique identifier of the current transaction
BIGINT
CURRENT_TRANSACTION
The transaction identifier is derived from a counter on the database header page, which is incremented for each new transaction.When a database is restored, this counter is reset to zero.
select current_transaction from rdb$database
New.Txn_ID = current_transaction;
CURRENT_USER
Name of the user of the current connection
VARCHAR(63)
CURRENT_USER
CURRENT_USER
is equivalent to [fblangref50-contextvars-user].
create trigger bi_customers for customers before insert as
begin
New.added_by = CURRENT_USER;
New.purchases = 0;
end
DELETING
Indicates if the trigger fired for a DELETE
operation
PSQL — DML triggers only
BOOLEAN
DELETING
Intended for use in multi-action triggers.
if (deleting) then
begin
insert into Removed_Cars (id, make, model, removed)
values (old.id, old.make, old.model, current_timestamp);
end
GDSCODE
Firebird error code of the error in a WHEN … DO
block
PSQL
INTEGER
GDSCODE
In a “WHEN … DO
” error handling block, the GDSCODE
context variable contains the numeric value of the current Firebird error code.GDSCODE
is non-zero in WHEN … DO
blocks, if the current error has a Firebird error code.Outside error handlers, GDSCODE
is always 0.Outside PSQL, it doesn’t exist at all.
Note
|
After |
when gdscode grant_obj_notfound, gdscode grant_fld_notfound,
gdscode grant_nopriv, gdscode grant_nopriv_on_base
do
begin
execute procedure log_grant_error(gdscode);
exit;
end