CURRENT_CONNECTION
DSQL, PSQL
CURRENT_CONNECTION
BIGINT
La variable CURRENT_CONNECTION
stocke l’identifiant unique de la connexion en cours. La valeur de la variable est stockée dans la page d’en-tête de la base de données et est réinitialisée après la restauration. La variable est incrémentée de un à chaque fois qu’une connexion ultérieure à la base de données est établie (les connexions peuvent également être déclenchées en interne par le noyau lui-même). La variable indique donc combien de connexions ont été établies sur la base de données depuis sa restauration (ou depuis sa création).
CURRENT_CONNECTION
SELECT CURRENT_CONNECTION FROM RDB$DATABASE
INSERTING
PSQL
INSERTING
BOOLEAN
La variable de contexte INSERTING
est uniquement disponible dans les déclencheurs de table. Elle est utilisée dans les déclencheurs pour plusieurs types d’événements et indique que le déclencheur a été déclenché par l’opération INSERTING
.
INSERTING
...
IF (INSERTING OR UPDATING) THEN
BEGIN
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
END
...
[fblangref-contextvars-updating], [fblangref-contextvars-deleting].
LOCALTIME
DSQL, PSQL, ESQL
LOCALTIME [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
Paramètre | Description |
---|---|
precision |
Précision. La valeur par défaut est 0. Non supporté dans ESQL. |
TIME WITHOUT TIME ZONE
La variable LOCALTIME
renvoie l’heure actuelle dans le fuseau horaire de la session, sans information sur le fuseau horaire. La précision détermine le nombre de décimales à considérer dans les fractions de seconde. La précision par défaut est 0.
Note
|
Dans un bloc de code PSQL (procédure, trigger, bloc exécutable), la valeur de |
LOCALTIME
SELECT LOCALTIME(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 23:35:33.1200
LOCALTIMESTAMP
DSQL, PSQL, ESQL
LOCALTIMESTAMP [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
Paramètre | Description |
---|---|
precision |
Précision. La valeur par défaut est 3. Non supporté dans ESQL. |
TIMESTAMP WITHOUT TIME ZONE
La variable LOCALTIMESTAMP
renvoie la date et l’heure actuelles dans le fuseau horaire de la session, sans information sur le fuseau horaire. La précision détermine le nombre de décimales à considérer dans les fractions de seconde. La précision par défaut est de 3.
Note
|
Dans un bloc de code PSQL (procédure, trigger, bloc exécutable), la valeur de |
LOCALTIMESTAMP
SELECT LOCALTIMESTAMP(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 02.03.2014 23:35:33.1200
NEW
PSQL
NEW
La variable contextuelle NEW
est uniquement disponible dans le code des triggers de table. La valeur de NEW
contient les nouvelles valeurs des champs de données qui sont apparues dans la base de données pendant l’opération de mise à jour ou d’insertion.
Dans les déclencheurs AFTER
, la variable est en lecture seule.
Note
|
Pour les triggers de table déclenchés par plusieurs types d’événements, la variable |
Important
|
La tentative d’écrire dans la variable |
NEW
...
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
...
OLD
PSQL
OLD
La variable contextuelle OLD
est uniquement disponible pour le code du déclencheur. La valeur contenue dans OLD
stocke les valeurs passées des champs qui étaient dans la base de données avant l’opération de modification ou de suppression.
La variable OLD
est en lecture seule.
Note
|
Pour les déclencheurs de table déclenchés par plusieurs types d’événements, les valeurs de la variable |
OLD
...
IF (NEW.QUANTITY IS DISTINCT FROM OLD.QUANTITY) THEN
DELTA = NEW.QUANTITY - OLD.QUANTITY;
...
RESETTING
PSQL
RESETTING
BOOLEAN
La variable contextuelle RESETTING
n’est disponible que pour les déclencheurs d’événements ON CONNECT
et ON DISCONNECT
et peut être utilisée partout où un prédicat logique peut être utilisé. La variable système RESETTING
permet de détecter quand un déclencheur de base de données est déclenché par une réinitialisation de session, par exemple avec l’instruction ALTER SESSION RESET
. Sa valeur est TRUE
si une réinitialisation de session est effectuée, et FALSE
sinon.
RESETTING
...
IF (RESETTING) THEN
BEGIN
-- la session est réinitialisée
END
...
ROW_COUNT
PSQL
ROW_COUNT
BIGINT
La variable contextuelle ROW_COUNT
contient le nombre de lignes affectées par la dernière instruction DML.(INSERT
, UPDATE
, DELETE
, SELECT
ou FETCH
) dans le déclencheur, la procédure stockée ou le bloc exécutable en cours.
Comportement avec SELECT
et FETCH
:
Après avoir exécuté une requête singleton SELECT
(une requête qui ne peut retourner plus d’une ligne de données), ROW_COUNT
est 1 si une chaîne de données a été récupérée et 0 sinon ;
Dans la boucle FOR SELECT
, la variable ROW_COUNT
est incrémentée à chaque itération (en commençant par 0 comme première valeur) ;
Après la sélection (FETCH
) du curseur, ROW_COUNT
vaut 1 si une chaîne de données a été récupérée et 0 sinon. La sélection de plusieurs enregistrements à partir du même curseur n’incrémente pas ROW_COUNT
après 1.
Important
|
La variable |
Warning
|
N’utilisez pas la variable
Dans l’exemple ci-dessus, la colonne
|
ROW_COUNT
...
UPDATE Figures SET Number = 0 WHERE id = :id;
IF (row_count = 0) THEN
INSERT INTO Figures (id, Number)
VALUES (:id, 0);
...
SQLCODE
PSQL
SQLCODE
INTEGER
Dans les blocs de gestion d’erreur WHEN … DO
la variable contextuelle SQLCODE
contient le code d’erreur SQL actuel.Avant Firebird 2.0, la valeur de SQLCODE
ne pouvait être récupérée que dans les blocs d’erreur WHEN SQLCODE et WHEN ANY.Il peut maintenant être non nul dans les blocs WHEN GDSCODE
et WHEN EXCEPTION
à condition que l’erreur qui a déclenché le bloc corresponde au code d’erreur SQL.En dehors des gestionnaires d’erreurs, SQLCODE
est toujours 0 et en dehors de PSQL, il n’existe pas du tout.
SQLCODE
...
WHEN ANY DO
BEGIN
IF (SQLCODE <> 0) THEN
MSG = 'Erreur SQL détectée !';
ELSE
MSG = 'Il n''y a pas d''erreur !';
EXCEPTION EX_CUSTOM MSG;
END
...
[fblangref-contextvars-gdscode], [fblangref-contextvars-sqlstate].
SQLSTATE
PSQL
SQLSTATE
CHAR(5)
Dans les blocs de gestion d’erreur WHEN … DO
variable de contexte SQLSTATE
variable contient 5 caractères du code d’état compatible SQL-2003 — passé par la déclaration causant l’erreur.En dehors des gestionnaires d’erreurs, SQLSTATE
est toujours '00000' et en dehors de PSQL, il n’existe pas du tout.
Note
|
|
SQLSTATE
WHEN ANY DO
BEGIN
MSG = CASE SQLSTATE
WHEN '22003' THEN
'Le nombre est hors de portée !'
WHEN '22012' THEN
'Division par zéro !'
WHEN '23000' THEN
'Violation du control d''intégrité !'
ELSE 'Il n''y a pas d''erreurs ! SQLSTATE = ' || SQLSTATE;
END;
EXCEPTION EX_CUSTOM MSG;
END
UPDATING
PSQL
UPDATING
BOOLEAN
La variable contextuelle UPDATING
n’est disponible que dans le code des triggers de table. Elle est utilisée dans les triggers pour plusieurs types d’événements et indique que le trigger a été déclenché lorsque l’opération UPDATE
a été effectuée.
UPDATING
...
IF (INSERTING OR UPDATING) THEN
BEGIN
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
END
...
CURRENT_DATE
DSQL, PSQL, ESQL
CURRENT_DATE
DATE
La variable CURRENT_DATE
renvoie la date actuelle du serveur.
Note
|
Dans un module PSQL (procédure, fonction, trigger ou bloc exécutable), la valeur de |
CURRENT_DATE
Select current_date from rdb$database
USER
DSQL, PSQL
USER
VARCHAR(63)
La variable USER
contient le nom de l’utilisateur de la base de données actuellement connecté.
USER
NEW.ADDED_BY = USER;
CURRENT_ROLE
DSQL, PSQL
CURRENT_ROLE
VARCHAR(63)
Une variable de contexte CURRENT_ROLE
contenant le nom du rôle qui a été spécifié lors de la connexion à la base de données, ou le rôle défini avec l’opérateur SET ROLE
.Dans le cas où une connexion s’est produite sans spécifier de rôle, et que le rôle n’a pas été spécifié plus tard en utilisant l’opérateur SET ROLE
, la variable prend la valeur NONE
.
CURRENT_ROLE
représente toujours un rôle valide ou NONE
. Si un utilisateur se connecte avec un rôle inexistant,le noyau le réinitialise silencieusement à NONE
sans retourner d’erreur.
Note
|
La variable de contexte |
CURRENT_ROLE
SELECT CURRENT_ROLE FROM RDB$DATABASE
Note
|
La même valeur sera également disponible en tant que résultat de la requête :
|
CURRENT_TIME
DSQL, PSQL, ESQL
CURRENT_TIME [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
Paramètre | Description |
---|---|
precision |
Précision. La valeur par défaut est 0. Non supporté dans ESQL. |
TIME WITH TIME ZONE
La variable CURRENT_TIME
renvoie l’heure actuelle dans le fuseau horaire de la session, y compris les informations sur le fuseau horaire. La précision détermine le nombre de décimales à considérer dans les fractions de seconde. La précision par défaut est 0.
Note
|
Dans un bloc de code PSQL (procédure, trigger, bloc exécutable), la valeur de |
CURRENT_TIME
SELECT CURRENT_TIME(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 23:35:33.1200 Europe/Moscow
CURRENT_TIMESTAMP
DSQL, PSQL, ESQL
CURRENT_TIMESTAMP [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
Paramètre | Description |
---|---|
precision |
Précision. La valeur par défaut est 3. Non supporté dans ESQL. |
TIMESTAMP WITH TIME ZONE
La variable CURRENT_TIMESTAMP
renvoie la date et l’heure actuelles dans le fuseau horaire de la session, y compris les informations sur le fuseau horaire. La précision détermine le nombre de décimales en fractions de seconde à prendre en compte. La précision par défaut est de 3.
Note
|
Dans un bloc de code PSQL (procédure, trigger, bloc exécutable), la valeur de |
CURRENT_TIMESTAMP
SELECT CURRENT_TIMESTAMP(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 02.03.2014 23:35:33.1200 Europe/Moscow
CURRENT_TRANSACTION
DSQL, PSQL
CURRENT_TRANSACTION
BIGINT
La variable CURRENT_TRANSACTION
contient un numéro unique pour la transaction en cours.
La valeur de CURRENT_TRANSACTION
est ``stockée dans la page d’en-tête de la base de données et remise à 0 lorsque la base est restaurée (ou créée). Il est incrémenté lorsqu’une nouvelle transaction est lancée.
CURRENT_TRANSACTION
SELECT CURRENT_TRANSACTION FROM RDB$DATABASE;
NEW.TRANS_ID = CURRENT_TRANSACTION;
[fblangref-contextvars-current-connection], RDB$GET_CONTEXT()
.
CURRENT_USER
DSQL, PSQL
CURRENT_USER
VARCHAR(63)
La variable CURRENT_USER
contient le nom de l’utilisateur de la base de données actuellement connecté.
CURRENT_USER
NEW.ADDED_BY = CURRENT_USER;
[fblangref-contextvars-user], [fblangref-contextvars-current-role].
DELETING
PSQL
DELETING
BOOLEAN
La variable contextuelle DELETING
est uniquement disponible dans le code des triggers de table. Elle est utilisée dans les triggers pour plusieurs types d’événements et indique que le trigger a été déclenché lorsque l’opération DELETE
est exécutée.
DELETING
...
IF (DELETING) THEN
BEGIN
INSERT INTO REMOVED_CARS (
ID, MAKE, MODEL, REMOVED)
VALUES (
OLD.ID, OLD.MAKE, OLD.MODEL, CURRENT_TIMESTAMP);
END
...
GDSCODE
PSQL
GDSCODE
INTEGER
Dans le bloc de gestion des erreurs WHEN … DO
la variable contextuelle GDSCODE
contient une représentation numérique du code d’erreur actuel de Firebird.Avant Firebird 2.0, GDSCODE
ne pouvait être récupéré qu’en utilisant la construction WHEN GDSCODE
.Maintenant, cette variable contextuelle peut aussi être utilisée dans les blocs WHEN ANY
, WHEN SQLCODE
et WHEN EXCEPTION
, tant que le code d’erreur correspond au code d’erreur de Firebird.En dehors du gestionnaire d’erreur, GDSCODE
est toujours 0.En dehors de PSQL, GDSCODE
n’existe pas du tout.
GDSCODE
...
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
...
Note
|
Attention : après, |
[fblangref-contextvars-sqlcode], [fblangref-contextvars-sqlstate].