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_CONNECTIONUnique 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)
INSERTINGIndicates 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
LOCALTIMECurrent 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
LOCALTIMESTAMPCurrent 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
NEWRecord 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
OLDRecord 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 |
RESETTINGIndicates 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_COUNTNumber 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 FETCHAfter 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);
SQLCODESQLCODE 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
SQLSTATESQLSTATE 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_DATECurrent 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
UPDATINGIndicates 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
USERName 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_ROLECurrent 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_TIMECurrent 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_TIMESTAMPCurrent 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_TRANSACTIONUnique 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_USERName 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
DELETINGIndicates 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
GDSCODEFirebird 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