À partir de la version V1.3, Hologres intègre l'extension Orafce pour prendre en charge certaines fonctions Oracle. Cette rubrique détaille la syntaxe et les spécificités des fonctions Oracle compatibles avec Hologres.
Installation de l'extension Orafce
Avant d'utiliser une fonction Oracle prise en charge dans une base de données Hologres, exécutez la commande suivante en tant que superutilisateur pour installer l'extension Orafce. L'installation s'effectue au niveau de la base de données et n'est requise qu'une seule fois par base. Si vous créez une nouvelle base de données, réexécutez cette instruction :
-- Install the Orafce extension.
create extension if not exists orafce;
-- Uninstall the Orafce extension.
DROP EXTENSION orafce;
L'installation de l'extension Orafce génère automatiquement plusieurs schémas, notamment dbms_alert, dbms_assert, dbms_output, dbms_pipe, dbms_random, dbms_utility, oracle, plunit, plvchr, plvdate, plvlex, plvstr, plvsubst, ainsi que utl_file. Avant l'installation, assurez-vous qu'aucun schéma portant l'un de ces noms n'existe déjà dans la base de données, sans quoi l'opération échouera.
Fonctions Oracle
Le tableau ci-dessous répertorie les fonctions Oracle prises en charge par Hologres.
-
Fonctions de date
Fonction
Description
Exemple
Valeur de retour
add_months(day date, value int)
Ajoute le nombre de mois indiqué par le second paramètre à la date spécifiée par le premier paramètre et renvoie une date.
SELECT add_months(current_date, 2);2022-05-21
oracle_last_day(value date)
Identifie le dernier jour du mois auquel appartient la date spécifiée et renvoie cette date.
SELECT oracle_last_day('2022-05-01');2022-05-31
next_day(value date, weekday text)
Renvoie la date correspondant au premier jour de la semaine spécifié, à compter de la date de départ indiquée. Le premier paramètre définit la date de début, tandis que le second précise le jour de la semaine (par exemple, Friday).
SELECT next_day('2022-05-01', 'FRIDAY');2022-05-06
next_day(value date, weekday integer)
Renvoie la date du premier jour de la semaine rencontré à partir de la date de départ. Le premier paramètre indique la date initiale. Le second paramètre utilise un entier compris entre 1 et 7 pour représenter le jour de la semaine : 1 correspond à Sunday, 2 à Monday, et ainsi de suite jusqu'à 7 pour Saturday.
SELECT next_day('2022-05-01', 1);SELECT next_day('2022-05-01', 2);
2022-05-08
2022-05-02
months_between(date1 date, date2 date)
Calcule le nombre de mois séparant date1 de date2. La valeur renvoyée est positive si date1 est postérieure à date2, et négative dans le cas contraire.
SELECT months_between('2022-01-01', '2021-11-01');SELECT months_between('2021-11-01', '2022-01-01');
2
-2
trunc(value timestamp with time zone, fmt text)
Tronque un horodatage pour renvoyer une date. Le premier paramètre indique l'horodatage à tronquer. Le second paramètre définit l'unité de troncature : la valeur Y ramène l'horodatage au premier jour de l'année correspondante, tandis que Q le ramène au premier jour du trimestre correspondant.
SELECT TRUNC(current_date,'Y');SELECT TRUNC(current_date,'Q');
2022-01-01
2022-01-01
trunc(value timestamp with time zone)
Renvoie un horodatage basé sur une date spécifiée. Par défaut, l'horodatage inclut les heures, minutes et secondes.
SELECT TRUNC('2022-03-01'::timestamp);2022-03-01 00:00:00
round(value timestamp with time zone, fmt text)
Arrondit un horodatage à la valeur la plus proche selon une unité donnée, telle que la semaine ou le jour.
SELECT round('2022-02-22 13:11:22'::timestamp, 'YEAR');2022-01-01 00:00:00
round(value timestamp with time zone)
Arrondit un horodatage à la valeur la plus proche en utilisant le jour comme unité.
SELECT round('2022-02-22 13:11:22'::timestamp);2022-02-23 00:00:00
round(value date, fmt text)
Renvoie une date arrondie selon un format spécifié.
SELECT round(TO_DATE('27-OCT-00','DD-MON-YY'), 'YEAR');SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'), 'YEAR');
2001-01-01
2000-01-01
round(value date)
Renvoie une date arrondie selon un format spécifié.
SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'));2000-02-27
-
Fonctions de chaîne
Fonction
Description
Exemple
Valeur de retour
instr(str text, patt text, start integer, nth integer)
Recherche une sous-chaîne dans une chaîne. Si la sous-chaîne est trouvée, la fonction renvoie sa position ; sinon, elle renvoie 0. Le paramètre start indique la position de départ de la recherche, tandis que nth spécifie l'occurrence de la sous-chaîne à localiser.
SELECT instr('Hologres', 'o',1,2);SELECT instr('Hologres', 'o',1,1);
4
2
instr(str text, patt text, start integer)
Renvoie la position de la première occurrence d'une sous-chaîne dans une chaîne.
SELECT instr('Hologres', 'o',4);4
instr(str text, patt text)
Recherche une sous-chaîne à partir du début d'une chaîne.
SELECT instr('Hologres', 'o');2
plvstr.rvrs(str text, start integer, end integer)
Inverse l'ordre des caractères dans une chaîne spécifiée. Le paramètre str désigne la chaîne, tandis que start et end définissent respectivement les positions de début et de fin de la plage de caractères à inverser.
SELECT plvstr.rvrs('Hologres', 5,6);rg
plvstr.rvrs(str text, start integer)
Inverse l'ordre des caractères depuis la position indiquée par le paramètre start jusqu'à la fin de la chaîne spécifiée.
SELECT plvstr.rvrs('Hologres', 4);sergo
plvstr.rvrs(str text)
Inverse l'ordre de tous les caractères d'une chaîne.
SELECT plvstr.rvrs('Hologres');sergoloH
substr(str text, start integer)
Extrait les caractères depuis la position indiquée par le paramètre start jusqu'à la fin de la chaîne spécifiée.
SELECT substr('Hologres', 1);SELECT substr('Hologres', 4);
Hologres
ogres
substr(str text, start integer, len integer)
Extrait un nombre spécifique de caractères à partir de la position indiquée par le paramètre start. Le paramètre len définit le nombre de caractères à extraire.
SELECT substr('Hologres', 5, 5);SELECT substr('Oracle functions', 5, 5);
gresle
lefun
-
Autres fonctions
Fonction
Description
Exemple
Valeur de retour
listagg(str text)
Renvoie une chaîne concaténée issue de textes.
SELECT listagg(t) FROM (VALUES('holo'), ('gres')) as l(t);hologres
listagg(str text, str text)
Renvoie une chaîne concaténée issue de textes, en utilisant la valeur du second paramètre comme délimiteur.
SELECT listagg(t, '.') FROM (VALUES('holo'), ('gres')) as l(t);holo.gres
concat(str text, str text)
Concatène deux chaînes de caractères.
SELECT concat('holo','gres');hologres
concat(str text, anyarray)
concat(anyarray, str text)
concat(anyarray, anyarray)
Concatène des données de types identiques ou différents.
SELECT concat('hologres', 123);SELECT concat(123, 123);SELECT concat(current_date, 123);
hologres123
123123
2022-03-21123
nanvl(num real, num real)
nanvl(num decimal, num decimal)
Si le premier paramètre est de type NUMERIC, la fonction renvoie sa valeur. Dans le cas contraire, elle renvoie la valeur du second paramètre.
SELECT nanvl('NaN', 1.1);SELECT nanvl('1.2', 1.1);
1.1
1.2
bitand(num bigint, num bigint)
Effectue une opération ET logique sur deux nombres binaires de type INTEGER. Une seule ligne est renvoyée.
SELECT bitand(1,3);SELECT bitand(2,6);SELECT bitand(4,6);
1
2
4
nvl2(anyelement, anyelement, anyelement)
Si la valeur du premier paramètre est null, la fonction renvoie la valeur du troisième paramètre. Sinon, elle renvoie la valeur du second paramètre.
SELECT nvl2(null, 1, 2);SELECT nvl2(0, 1, 2);
2
1
lnnvl(boolean)
Renvoie true si la valeur du paramètre est null ou false. Renvoie false si la valeur du paramètre est true.
SELECT lnnvl(null);SELECT lnnvl(false);SELECT lnnvl(true);
t
t
f
sinh(num double precision)
Renvoie la valeur du sinus hyperbolique.
SELECT sinh(0.1);0.100166750019844
tanh(num double precision)
Renvoie la valeur de la tangente hyperbolique.
SELECT tanh(3);0.995054753686731
cosh(num double precision)
Renvoie la valeur du cosinus hyperbolique.
SELECT cosh(0.2);1.02006675561908
decode(expression, value, return [,value,return]... [, default])
Recherche une valeur dans une expression et renvoie cette valeur si elle est trouvée, ou la valeur par défaut spécifiée dans le cas contraire.
CREATE TABLE t1(id int, name varchar(20)); INSERT INTO t1 values(1,'alibaba'); INSERT INTO t1 values(2,'hologres');SELECT decode(id, 1, 'alibaba', 2, 'hologres', 'not found') from t1;SELECT decode(id, 3, 'alibaba', 4, 'hologres', 'not found') from t1;
hologres alibabanot found not found
dump(anyelement)
Renvoie un texte contenant le code du type de données, la longueur en octets et la représentation interne du premier paramètre.
SELECT dump('hologres');Typ=25 Len=12: 48,0,0,0,104,111,108,111,103,114,101,115
dump(anyelement, num integer)
Renvoie un texte. Le second paramètre spécifie le système de numération utilisé pour la représentation interne du premier paramètre.
SELECT dump('hologres', 10);SELECT dump('hologres', 16);
Typ=25 Len=12: 48,0,0,0,104,111,108,111,103,114,101,115
Typ=25 Len=12: 30,0,0,0,68,6f,6c,6f,67,72,65,73
nlssort(str text, str text)
Trie les données selon un ordre spécifique.
Exécutez les instructions suivantes pour créer une table et y insérer des données :
CREATE TABLE t1 (name text); INSERT INTO t1 VALUES('Anne'), ('anne'), ('Bob'), ('bob');SELECT * FROM t1 ORDER BY nlssort(name, 'en_US.UTF-8');SELECT*FROM t1 ORDER BY nlssort(name, 'C');
anne Anne bob BobAnne Bob anne bob