CURRENT_CONNECTIONDSQL, PSQL
INTEGER
CURRENT_CONNECTION
CURRENT_CONNECTION enthält den eindeutigen Bezeichner der aktuellen Verbindung.
Sein Wert wird von einem Zähler auf der Kopfseite der Datenbank abgeleitet, der bei jeder neuen Verbindung inkrementiert wird.Wenn eine Datenbank wiederhergestellt wird, wird dieser Zähler auf Null zurückgesetzt.
select current_connection from rdb$database
execute procedure P_Login(current_connection)
INSERTINGPSQL
BOOLEAN
INSERTING
Nur in Triggern verfügbar, zeigt INSERTING an, ob der Trigger aufgrund einer INSERT-Operation ausgelöst wurde.Vorgesehen für die Verwendung in Multi-Action-Trigger.
if (inserting or updating) then
begin
if (new.serial_num is null) then
new.serial_num = gen_id(gen_serials, 1);
end
LOCALTIMEDSQL, PSQL, ESQL
TIME WITHOUT TIME ZONE
LOCALTIME [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
Das optionale Argument precision wird in ESQL nicht unterstützt.
| Parameter | Beschreibung |
|---|---|
precision |
Präzision.Der Standardwert ist 0.In ESQL nicht unterstützt |
LOCALTIME gibt die aktuelle Serverzeit in der Sitzungszeitzone zurück.Der Standardwert ist 0 Dezimalstellen, d. h. Sekundengenauigkeit.
|
Note
|
|
select localtime from rdb$database
-- Ergebnis z.B. 14:20:19.0000
select localtime(2) from rdb$database
-- Ergebnis z.B. 14:20:23.1200
LOCALTIMESTAMPDSQL, PSQL, ESQL
TIMESTAMP WITHOUT TIME ZONE
LOCALTIMESTAMP [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
Das optionale Argument precision wird in ESQL nicht unterstützt.
| Parameter | Beschreibung |
|---|---|
precision |
Präzision.Der Standardwert ist 3.In ESQL nicht unterstützt |
LOCALTIMESTAMP gibt das aktuelle Serverdatum und die aktuelle Uhrzeit in der Sitzungszeitzone zurück.Der Standardwert ist 3 Dezimalstellen, d. h. Millisekunden-Genauigkeit.
|
Note
|
|
select localtimestamp from rdb$database
-- Ergebnis z.B. 2008-08-13 14:20:19.6170
select localtimestamp(2) from rdb$database
-- Ergebnis z.B. 2008-08-13 14:20:23.1200
NEWPSQL, nur Trigger
Datensatz
NEW.column_name
| Parameter | Beschreibung |
|---|---|
column_name |
Spaltenname für den Zugriff |
NEU enthält die neue Version eines Datenbankeintrags, der gerade eingefügt oder aktualisiert wurde.Ab Firebird 2.0 ist es in 'AFTER'-Triggern schreibgeschützt.
|
Note
|
Bei Multi-Action-Triggern — eingeführt in Firebird 1.5 — ist |
'NOW'DSQL, PSQL, ESQL
CHAR(3)
'NOW' ist keine Variable, sondern ein String-Literal oder eine Datums-/Uhrzeit-Mnemonik.Es ist jedoch in dem Sinne besonders, dass Sie, wenn Sie es in einen Datums-/Uhrzeittyp CAST() geben, das aktuelle Datum und/oder die aktuelle Uhrzeit erhalten.Seit Firebird 2.0 beträgt die Genauigkeit 3 Dezimalstellen, also Millisekunden. Bei 'NOW' wird die Groß-/Kleinschreibung nicht beachtet und die Engine ignoriert führende oder nachfolgende Leerzeichen beim Casting.
|
Note
|
|
select 'Now' from rdb$database
-- Ergebnis 'Now'
select cast('Now' as date) from rdb$database
-- Ergebnis z.B. 2008-08-13
select cast('now' as time) from rdb$database
-- Ergebnis z.B. 14:20:19.6170
select cast('NOW' as timestamp) from rdb$database
-- Ergebnis z.B. 2008-08-13 14:20:19.6170
OLDPSQL, nur Trigger
Datensatz
OLD.column_name
| Parameter | Beschreibung |
|---|---|
column_name |
Spaltenname für den Zugriff |
OLD enthält die vorhandene Version eines Datenbankeintrags kurz vor einer Löschung oder Aktualisierung.Ab Firebird 2.0 ist es schreibgeschützt.
|
Note
|
Bei Multi-Action-Triggern — eingeführt in Firebird 1.5 — ist 'OLD' immer verfügbar.Wenn der Trigger jedoch durch ein 'INSERT' ausgelöst wird, gibt es offensichtlich keine bereits vorhandene Version des Datensatzes.In dieser Situation wird beim Lesen von |
RESETTINGPSQL
BOOLEAN
RESETTING
Nur in Triggern verfügbar, RESETTING zeigt an, ob der Trigger während eines Sitzungs-Resets ausgelöst wurde.Sein Wert ist TRUE, wenn das Zurücksetzen der Sitzung im Gange ist, andernfalls FALSE.Vorgesehen für die Verwendung in ON DISCONNECT- und ON CONNECT-Datenbank-Triggern, um einen ALTER SESSION RESET zu erkennen.
ROW_COUNTPSQL
INTEGER
ROW_COUNT
Die Kontextvariable ROW_COUNT enthält die Anzahl der Zeilen, die von der letzten DML-Anweisung (INSERT, UPDATE, DELETE, SELECT oder FETCH) im aktuellen Trigger, in der gespeicherten Prozedur oder im ausführbaren Block betroffen sind.
SELECT und FETCHNach einem Singleton SELECT ist ROW_COUNT 1, wenn eine Datenzeile abgerufen wurde, andernfalls 0.
In einer FOR SELECT Schleife wird ROW_COUNT bei jeder Iteration inkrementiert (beginnend bei 0 vor der ersten).
Nach einem FETCH von einem Cursor ist ROW_COUNT 1, wenn eine Datenzeile abgerufen wurde, andernfalls 0.Wenn mehr Datensätze vom gleichen Cursor abgerufen werden, wird ROW_COUNT nicht über 1 hinaus erhöht.
In Firebird 1.5.x ist ROW_COUNT 0 nach jeder Art von SELECT-Anweisung.
|
Note
|
|
update Figures set Number = 0 where id = :id;
if (row_count = 0) then
insert into Figures (id, Number) values (:id, 0);
SQLCODEPSQL
2.5.1
INTEGER
SQLCODE
In einem “WHEN … DO”-Fehlerbehandlungsblock enthält die Kontextvariable SQLCODE den aktuellen SQL-Fehlercode.Vor Firebird 2.0 wurde SQLCODE nur in den WHEN SQLCODE- und WHEN ANY-Handlern gesetzt.Sie darf jetzt auch in den Blöcken WHEN GDSCODE, WHEN SQLSTATE und WHEN EXCEPTION ungleich Null sein, sofern die fehlerauslösende Bedingung einem SQL-Fehlercode entspricht.Außerhalb von Fehlerhandlern ist SQLCODE immer 0.Außerhalb von PSQL existiert es überhaupt nicht.
|
Warning
|
|
when any
do
begin
if (sqlcode <> 0) then
Msg = 'An SQL error occurred!';
else
Msg = 'Something bad happened!';
exception ex_custom Msg;
end
SQLSTATEPSQL
CHAR(5)
SQLSTATE
In einer “WHEN … DO”-Fehlerbehandlung enthält die Kontextvariable SQLSTATE den 5-stelligen, SQL-2003-konformen Statuscode, der sich aus der Anweisung ergibt, die den Fehler ausgelöst hat.Außerhalb von Fehlerhandlern ist SQLSTATE immer '00000'.Außerhalb von PSQL ist es überhaupt nicht verfügbar.
|
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_DATEDSQL, PSQL, ESQL
DATE
CURRENT_DATE
CURRENT_DATE gibt das aktuelle Serverdatum zurück.
|
Note
|
Innerhalb eines PSQL-Moduls (Prozedur, Trigger oder ausführbarer Block) bleibt der Wert von |
select current_date from rdb$database
-- Ergebnis z.B. 2011-10-03
'TODAY'DSQL, PSQL, ESQL
CHAR(5)
'TODAY' ist keine Variable, sondern ein String-Literal oder ein Datumsmnemonik.Es ist jedoch in dem Sinne besonders, dass Sie, wenn Sie es in einen Datums-/Uhrzeittyp CAST() geben, das aktuelle Datum erhalten.Bei 'TODAY' wird die Groß-/Kleinschreibung nicht beachtet und die Engine ignoriert führende oder nachfolgende Leerzeichen beim Casting.
|
Note
|
|
select 'Today' from rdb$database
-- Ergebnis 'Today'
select cast('Today' as date) from rdb$database
-- Ergebnis z.B. 2011-10-03
select cast('TODAY' as timestamp) from rdb$database
-- Ergebnis z.B. 2011-10-03 00:00:00.0000
'TOMORROW'DSQL, PSQL, ESQL
CHAR(8)
'TOMORROW' ist keine Variable, sondern ein String-Literal.Es ist jedoch in dem Sinne besonders, dass Sie, wenn Sie es in einen Datums-/Uhrzeittyp CAST() geben, das Datum des nächsten Tages erhalten.Siehe auch [fblangref40-contextvars-today-de].
select 'Tomorrow' from rdb$database
-- Ergebnis 'Tomorrow'
select cast('Tomorrow' as date) from rdb$database
-- Ergebnis z.B. 2011-10-04
select cast('TOMORROW' as timestamp) from rdb$database
-- Ergebnis z.B. 2011-10-04 00:00:00.0000
UPDATINGPSQL
BOOLEAN
UPDATING
Nur in Triggern verfügbar, 'UPDATING' zeigt an, ob der Trigger aufgrund einer 'UPDATE'-Operation ausgelöst wurde.Vorgesehen für die Verwendung in Multi-Action-Trigger.
if (inserting or updating) then
begin
if (new.serial_num is null) then
new.serial_num = gen_id(gen_serials, 1);
end
'YESTERDAY'DSQL, PSQL, ESQL
CHAR(9)
'YESTERDAY' ist keine Variable, sondern ein String-Literal.Es ist jedoch in dem Sinne besonders, dass Sie, wenn Sie es in einen Datums-/Uhrzeittyp CAST() geben, das Datum des Vortages erhalten.Siehe auch [fblangref40-contextvars-today-de].
select 'Yesterday' from rdb$database
-- Ergebnis 'Yesterday'
select cast('Yesterday as date) from rdb$database
-- Ergebnis z.B. 2011-10-02
select cast('YESTERDAY' as timestamp) from rdb$database
-- Ergebnis z.B. 2011-10-02 00:00:00.0000
USERDSQL, PSQL
VARCHAR(63)
USER
USER ist eine Kontextvariable, die den Namen des aktuell verbundenen Benutzers enthält.Es entspricht vollständig [fblangref40-contextvars-current-user-de].
create trigger bi_customers for customers before insert as
begin
New.added_by = USER;
New.purchases = 0;
end
CURRENT_ROLEDSQL, PSQL
VARCHAR(63)
CURRENT_ROLE
CURRENT_ROLE ist eine Kontextvariable, die die explizit angegebene Rolle des aktuell verbundenen Benutzers enthält.Wenn keine explizit angegebene Rolle vorhanden ist, ist CURRENT_ROLE 'NONE'.
CURRENT_ROLE repräsentiert immer eine gültige Rolle oder 'NONE'.Wenn sich ein Benutzer mit einer nicht vorhandenen Rolle verbindet, setzt die Engine sie stillschweigend auf "NONE" zurück, ohne einen Fehler zurückzugeben.
|
Note
|
Rollen, die standardmäßig aktiv sind und nicht explizit beim Verbinden oder Verwenden von |
if (current_role <> 'MANAGER')
then exception only_managers_may_delete;
else
delete from Customers where custno = :custno;
CURRENT_TIMEDSQL, PSQL, ESQL
TIME WITH TIME ZONE
|
Caution
|
Der Datentyp wurde in Firebird 4.0 von |
CURRENT_TIME [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
Das optionale Argument precision wird in ESQL nicht unterstützt.
| Parameter | Beschreibung |
|---|---|
precision |
Präzision.Der Standardwert ist 0.In ESQL nicht unterstützt. |
CURRENT_TIME gibt die aktuelle Serverzeit in der Sitzungszeitzone zurück.Der Standardwert ist 0 Dezimalstellen, d. h. Sekundengenauigkeit.
|
Note
|
|
|
Warning
|
CURRENT_TIME und Firebird 4.0 ZeitzonenunterstützungFirebird 4.0 hat Unterstützung für Zeitzonen hinzugefügt.Als Teil dieser Unterstützung wurde eine Inkompatibilität mit dem In Firebird 4.0 gibt In Firebird 4.0 funktioniert |
select current_time from rdb$database
-- Ergebnis z.B. 14:20:19.0000
select current_time(2) from rdb$database
-- Ergebnis z.B. 14:20:23.1200
CURRENT_TIMESTAMPDSQL, PSQL, ESQL
TIMESTAMP WITH TIME ZONE
|
Caution
|
Der Datentyp wurde in Firebird 4.0 von |
CURRENT_TIMESTAMP [ (<precision>) ] <precision> ::= 0 | 1 | 2 | 3
Das optionale Argument precision wird in ESQL nicht unterstützt.
| Parameter | Beschreibung |
|---|---|
precision |
Präzision.Der Standardwert ist 0.In ESQL nicht unterstützt. |
CURRENT_TIMESTAMP gibt das aktuelle Serverdatum und die aktuelle Uhrzeit in der Sitzungszeitzone zurück.Der Standardwert ist 3 Dezimalstellen, d. h. Millisekunden-Genauigkeit.
|
Note
|
|
|
Warning
|
CURRENT_TIMESTAMP und Firebird 4 ZeitzonenunterstützungFirebird 4.0 hat Unterstützung für Zeitzonen hinzugefügt.Im Rahmen dieser Unterstützung wurde im Vergleich zu früheren Versionen eine Inkompatibilität mit dem In Firebird 4.0 gibt In Firebird 4.0 funktioniert |
select current_timestamp from rdb$database
-- Ergebnis z.B. 2008-08-13 14:20:19.6170
select current_timestamp(2) from rdb$database
-- Ergebnis z.B. 2008-08-13 14:20:23.1200
CURRENT_TRANSACTIONDSQL, PSQL
BIGINT
CURRENT_TRANSACTION
CURRENT_TRANSACTION enthält die eindeutige Kennung der aktuellen Transaktion.
Sein Wert wird von einem Zähler auf der Kopfseite der Datenbank abgeleitet, der bei jeder neuen Transaktion inkrementiert wird.Wenn eine Datenbank wiederhergestellt wird, wird dieser Zähler auf Null zurückgesetzt.
select current_transaction from rdb$database
New.Txn_ID = current_transaction;
CURRENT_USERDSQL, PSQL
VARCHAR(63)
CURRENT_USER
CURRENT_USER ist eine Kontextvariable, die den Namen des aktuell verbundenen Benutzers enthält.Es ist völlig äquivalent zu [fblangref40-contextvars-user-de].
create trigger bi_customers for customers before insert as
begin
New.added_by = CURRENT_USER;
New.purchases = 0;
end
DELETINGPSQL
BOOLEAN
DELETING
Nur in Triggern verfügbar, DELETING zeigt an, ob der Trigger für eine DELETE-Operation ausgelöst wurde.Vorgesehen für die Verwendung in multi-action triggers-de.
if (deleting) then
begin
insert into Removed_Cars (id, make, model, removed)
values (old.id, old.make, old.model, current_timestamp);
end
GDSCODEPSQL
INTEGER
GDSCODE
In einem “WHEN … DO”-Fehlerbehandlungsblock enthält die Kontextvariable GDSCODE die numerische Darstellung des aktuellen Firebird-Fehlercodes.Vor Firebird 2.0 wurde GDSCODE nur in WHEN GDSCODE-Handlern gesetzt.Jetzt kann es auch in den Blöcken WHEN ANY, WHEN SQLCODE, WHEN SQLSTATE und WHEN EXCEPTION ungleich Null sein, vorausgesetzt, die den Fehler auslösende Bedingung entspricht einem Firebird-Fehlercode.Außerhalb von Fehlerhandlern ist GDSCODE immer 0.Außerhalb von PSQL existiert es überhaupt nicht.
|
Note
|
Nach |
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