FirebirdSQL logo

Les fonctions scalaires produisent une valeur scalaire unique pour chaque ligne qui répond au critère de recherche de la requête

Vous pouvez utiliser des fonctions scalaires pour convertir une valeur d’un type de données dans un autre et traiter les valeurs de date/heure. Vous pouvez également les utiliser pour manipuler des parties de chaînes de caractères et éviter les valeurs null.

Une fonction scalaire prend un ou plusieurs arguments d’entrée et renvoie un résultat de valeur unique. Une fonction scalaire peut être utilisée partout où une expression peut être utilisée.

Les restrictions relatives à l’utilisation des fonctions d’agrégation ne s’appliquent pas aux fonctions scalaires, car une fonction scalaire est appliquée à des valeurs de paramètre unique plutôt qu’à des ensembles de valeurs. L’argument d’une fonction scalaire peut être une fonction. Toutefois, les restrictions qui s’appliquent à l’utilisation d’expressions et de fonctions d’agrégation s’appliquent également lorsqu’une expression ou une fonction d’agrégation est utilisée dans une fonction scalaire. Par exemple, l’argument d’une fonction scalaire peut être une fonction d’agrégation uniquement si une fonction d’agrégation est autorisée dans le contexte dans lequel la fonction scalaire est utilisée.

Fonctions pour traiter les variables contextuelles

RDB$GET_CONTEXT()

Disponible en

DSQL, PSQL

Syntaxe
RDB$GET_CONTEXT('<namespace>', 'varname')

<namespace> ::= SYSTEM | DDL_TRIGGER | USER_SESSION | USER_TRANSACTION
Table 1. paramètres de fonction RDB$GET_CONTEXT
Paramètre Description

namespace

Namespace.

varname

Le nom de la variable.Sensible à la casse.La longueur maximale est de 80 octets.

Le type de résultat renvoyé :

VARCHAR(255) CHARACTER SET NONE

La fonction RDB$GET_CONTEXT renvoie la valeur d’une variable contextuelle de l’un des espaces de noms.

Les espaces de noms suivants existent actuellement :

  • SYSTEM — fournit un accès aux variables du contexte système. Ces variables sont en lecture seule ;

  • USER_SESSION — fournit un accès aux variables de contexte utilisateur définies via la fonction RDB$SET_CONTEXT. Les variables existent pour la durée de la connexion ;

  • USER_TRANSACTION — Fournit un accès aux variables de contexte utilisateur définies via la fonction RDB$SET_CONTEXT. Les variables existent pendant la transaction ;

  • DL_TRIGGER — fournit un accès aux variables de contexte du système disponibles uniquement pendant l’exécution du trigger DDL. Ces variables sont en lecture seule.

Les espaces de noms USER_SESSION et USER_TRANSACTION sont initialement vides et l’utilisateur crée les variables et les remplit avec la fonction RDB$SET_CONTEXT.

Note

Pour éviter les attaques DoS, il y a une limite de 1000 variables dans un "espace de noms".

Si la variable demandée par la fonction existe dans l’espace de noms, elle est retournée sous la forme d’une chaîne VARCHAR(255) CHARACTER SET NONE. Si une variable inexistante dans l’espace de noms SYSTEM est référencée, il y a une erreur si cela se produit dans les espaces de noms USER_SESSION ou USER_TRANSACTION - la fonction retourne NULL.

Espace de nommage SYSTEM

Variables de l’espace de nommage SYSTEM
CLIENT_ADDRESS

Adresse du client. Pour TCPv4 - adresse IP, pour XNET - ID du processus local. Pour les autres cas NULL.

CLIENT_HOST

Le nom d’hôte du protocole réseau du client distant. La valeur est renvoyée pour tous les protocoles pris en charge.

CLIENT_OS_USER

Le nom d’utilisateur du système d’exploitation de l’ordinateur client.

CLIENT_PID

Le PID du processus sur l’ordinateur client.

CLIENT_PROCESS

Chemin complet de l’application client se connectant à la base de données.

CLIENT_VERSION

La version de la bibliothèque client (fbclient) utilisée par l’application client.

CURRENT_ROLE

La variable globale CURRENT_ROLE.

CURRENT_USER

La variable globale CURRENT_USER.

DB_NAME

Le nom canonique de la base de données actuelle. C’est soit un nom d’alias (si la connexion au nom de fichier est interdite DatabaseAccess = NONE) ou, sinon, un nom de fichier de base de données entièrement étendu.

DB_FILE_ID

Identifiant unique de la base de données actuelle au niveau du système de fichiers.

DB_GUID

GUID de la base de données.

EFFECTIVE_USER

L’utilisateur effectif à l’heure actuelle. Indique l’utilisateur avec des privilèges dont la procédure, la fonction ou le déclencheur est en cours d’exécution.

ENGINE_VERSION

Version du serveur Firebird.

EXT_CONN_POOL_SIZE

Taille du pool de connexions externes.

EXT_CONN_POOL_LIFETIME

La durée de vie des connexions inactives dans le pool de connexion externe.

EXT_CONN_POOL_IDLE_COUNT

Le nombre actuel de connexions inactives dans le pool de connexions externes.connexions.

EXT_CONN_POOL_ACTIVE_COUNT

Le nombre actuel de connexions actives dans le pool de connexions externes.

GLOBAL_CN

Dernière valeur du compteur global actuel de Commit Number

ISOLATION_LEVEL

Le niveau d’isolement de la transaction actuelle — CURRENT_TRANSACTION. Valeurs : 'READ_COMMITED', 'SNAPSHOT' ou 'CONSISTENCY'.

LOCK_TIMEOUT

Le temps qu’une transaction attend pour que la ressource soit libérée lorsqu’elle est bloquée, en secondes.

NETWORK_PROTOCOL

Le protocole utilisé pour se connecter à la base de données. Valeurs possibles : 'TCPv4', 'TCPv6', 'WNET', 'XNET', NULL.

PARALLEL_WORKERS

Nombre maximal de flux de travail parallèles dans la connexion actuelle.

READ_ONLY

Indique si la transaction est une transaction en lecture seule. 'FALSE' pour les transactions en lecture-écriture 'TRUE' pour la lecture seule.

REPLICA_MODE

Mode de réplication : chaîne vide ou NULL--base de données primaire, READ-ONLY--réplique en lecture seule, READ-WRITE--réplique en lecture-écriture.

REPLICATION_SEQUENCE

La valeur actuelle de la séquence de réplication (le numéro du dernier segment écrit dans le journal de réplication).

SESSION_ID

Variable globale CURRENT_CONNECTION.

SESSION_IDLE_TIMEOUT

Contient la valeur actuelle du délai d’inactivité de la connexion en secondes, qui a été définie au niveau de la connexion, ou zéro si aucun délai n’a été défini.

SESSION_TIMEZONE

Le fuseau horaire actuel défini dans la session en cours.

SNAPSHOT_NUMBER

Nombre d’instantanés de la base de données : niveau transaction (pour la transaction SNAPSHOT ou CONSISTENCY) ou niveau requête (pour la transaction READ COMMITTED READ CONSISTENCY). NULL si le snapshot n’existe pas.

STATEMENT_TIMEOUT

Contient la valeur actuelle du délai d’exécution de l’opérateur en millisecondes, qui a été défini au niveau de la connexion, ou zéro si aucun délai n’a été défini.

TRANSACTION_ID

Variable globale CURRENT_TRANSACTION.

WIRE_COMPRESSED

Si la compression du trafic réseau est utilisée ou non. Si la compression du trafic réseau est utilisée, elle renvoie 'TRUE', sinon 'FALSE'. Pour les connexions embarquées — renvoie NULL.

WIRE_ENCRYPTED

Si le cryptage du trafic réseau est utilisé. Si le cryptage du trafic réseau est utilisé, renvoie "VRAI", sinon "FAUX". Pour les connexions embarquées — renvoie NULL.

WIRE_CRYPT_PLUGIN

Si le cryptage du trafic réseau est utilisé, renvoie le nom du plugin de cryptage actuel, sinon NULL.