FirebirdSQL logo
 Types de donnéesLanguage de définition des données (DDL) 
Constantes de chaîne en notation hexadécimale

Depuis Firebird 2.5, les constantes de type chaîne peuvent être écrites en notation hexadécimale, ce que l’on appelle des “chaînes binaires”.Chaque paire de chiffres hexadécimaux définit un octet dans la chaîne.Les chaînes de caractères entrées de cette façon auront l’encodage OCTETS par défaut,Mais introducer syntax peut être utilisé pour forcer la chaîne à être interprétée dans un jeu de caractères différent.

Syntaxe:
{x|X}'<hexstring>'

<hexstring> ::= an even number of <hexdigit>

<hexdigit> ::= 0..9 | A..F | a..f
Example 1. Exemples:
SELECT x'4E657276656E' FROM rdb$database
-- returns 4E657276656E, a 6-byte 'binary' string

SELECT _ascii x'4E657276656E' FROM rdb$database
-- returns 'Nerven' (same string, now interpreted as ASCII text)

SELECT _iso8859_1 x'53E46765' FROM rdb$database
-- returns 'Säge' (4 chars, 4 bytes)

SELECT _utf8 x'53C3A46765' FROM rdb$database
-- returns 'Säge' (4 chars, 5 bytes)
Note

La façon dont les chaînes binaires sont affichées dépend de l’interface client.Par exemple, l’utilitaire isql utilise les lettres majuscules A-F, tandis que FlameRobin utilise les lettres minuscules.D’autres peuvent utiliser d’autres règles de conversion, comme l’affichage d’espaces entre les paires d’octets : "4E 65 72 76 65 6E".

La notation hexadécimale permet d’insérer n’importe quel octet (y compris 00) à n’importe quelle position dans une chaîne.

Un littéral peut contenir des espaces pour séparer les caractères hexadécimaux.Un littéral de chaîne peut être "terminé" par un espace ou un commentaire si nécessaire.Cela peut être utilisé pour rendre une chaîne hexadécimale plus lisible en regroupant les caractères,ou pour diviser un long littéral en plusieurs lignes, ou encore pour fournir des commentaires en ligne.

Example 2. Littéral binaire interrompu par un espace
-- Groupe par octet (espace à l'intérieur du littéral)
select _win1252 x'42 49 4e 41 52 59'
from RDB$DATABASE;
-- sortie: BINARY

-- Espacement entre les caractères littéraux
select _win1252 x'42494e'
                 '415259'
from RDB$DATABASE;
-- sortie: BINARY
Alternatives pour les apostrophes dans les littéraux de chaînes de caractères

Au lieu d’une double apostrophe (échappée), vous pouvez utiliser un autre caractère ou une paire de caractères.

Le mot-clé q ou Q précédant une chaîne de caractères entre guillemets indique à l’analyseur syntaxique que certaines paires gauche et droite de mêmes caractères sont des délimiteurs pour le littéral de chaîne intégré.

Syntaxe:
<alternate string literal> ::=
  { q | Q } <quote> <alternate start char>
  [ { <char> }... ]
  <alternate end char> <quote>
Note
Règles d’utilisation

Lorsque <caractère alternatif de début> est l’un des caractères '(', '{', '[' ou '<', alors <caractère alternatif de fin> doit êtreutilisé en conjonction avec un `partenaire' approprié, tel que ')', '}', ']' ou '>'. Dans les autres cas, <caractère de fin alternatif> est le même que <caractère de début alternatif>.

À l’intérieur d’une chaîne de caractères, c’est-à-dire des éléments <char>, il est possible d’utiliser des guillemets simples (non masqués).Chaque guillemet fera partie de la chaîne de caractères résultante.

Example 1. Utilisation d’apostrophes alternatives dans les chaînes de caractères
-- result: abc{def}ghi
SELECT Q'{abc{def}ghi}' FROM rdb$database;

-- result: That's a string
SELECT Q'!That's a string!' FROM rdb$database;
Example 2. Assemblage dynamique de requêtes à l’aide de chaînes de caractères.
EXECUTE BLOCK
RETURNS (
  RDB$TRIGGER_NAME CHAR(64)
)
AS
  DECLARE VARIABLE S VARCHAR(8191);
BEGIN
  S = 'SELECT RDB$TRIGGER_NAME FROM RDB$TRIGGERS WHERE RDB$RELATION_NAME IN ';
  S = S || Q'! ('SALES_ORDER', 'SALES_ORDER_LINE')!';
  FOR
    EXECUTE STATEMENT :S
    INTO :RDB$TRIGGER_NAME
  DO
    SUSPEND;
END