CURRENT_CONNECTIONDSQL, 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_CONNECTIONSELECT CURRENT_CONNECTION FROM RDB$DATABASE
INSERTINGPSQL
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].
LOCALTIMEDSQL, 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 |
LOCALTIMESELECT LOCALTIME(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 23:35:33.1200
LOCALTIMESTAMPDSQL, 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 |
LOCALTIMESTAMPSELECT LOCALTIMESTAMP(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 02.03.2014 23:35:33.1200
NEWPSQL
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);
...
OLDPSQL
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;
...
RESETTINGPSQL
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_COUNTPSQL
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);
...
SQLCODEPSQL
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].
SQLSTATEPSQL
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
|
|
SQLSTATEWHEN 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
UPDATINGPSQL
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_DATEDSQL, 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_DATESelect current_date from rdb$database
USERDSQL, PSQL
USER
VARCHAR(63)
La variable USER contient le nom de l’utilisateur de la base de données actuellement connecté.
USERNEW.ADDED_BY = USER;
CURRENT_ROLEDSQL, 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_ROLESELECT CURRENT_ROLE FROM RDB$DATABASE
|
Note
|
La même valeur sera également disponible en tant que résultat de la requête :
|
CURRENT_TIMEDSQL, 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_TIMESELECT CURRENT_TIME(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 23:35:33.1200 Europe/Moscow
CURRENT_TIMESTAMPDSQL, 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_TIMESTAMPSELECT CURRENT_TIMESTAMP(2) FROM RDB$DATABASE;
-- le résultat sera (par exemple) 02.03.2014 23:35:33.1200 Europe/Moscow
CURRENT_TRANSACTIONDSQL, 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_TRANSACTIONSELECT CURRENT_TRANSACTION FROM RDB$DATABASE;
NEW.TRANS_ID = CURRENT_TRANSACTION;
[fblangref-contextvars-current-connection], RDB$GET_CONTEXT().
CURRENT_USERDSQL, PSQL
CURRENT_USER
VARCHAR(63)
La variable CURRENT_USER contient le nom de l’utilisateur de la base de données actuellement connecté.
CURRENT_USERNEW.ADDED_BY = CURRENT_USER;
[fblangref-contextvars-user], [fblangref-contextvars-current-role].
DELETINGPSQL
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
...
GDSCODEPSQL
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].