Todos los productos
Search
Centro de documentos

:Funciones de Oracle compatibles

Última actualización: Sep 05, 2026

A partir de Hologres V1.3, se introdujo la extensión Orafce para admitir algunas funciones de Oracle. Este tema describe la sintaxis y los detalles de las funciones de Oracle compatibles con Hologres.

Instalar la extensión Orafce

Antes de usar una función de Oracle compatible en una base de datos de Hologres, debe ejecutar la siguiente sentencia como superusuario para instalar la extensión Orafce en dicha base de datos. La extensión se instala en la base de datos, por lo que solo necesita instalarla una vez por cada base de datos. Si crea una nueva base de datos, deberá ejecutar nuevamente la siguiente sentencia:

-- Install the Orafce extension.
create extension if not exists orafce; 
-- Uninstall the Orafce extension.
DROP EXTENSION orafce;	
Nota

Al instalar la extensión Orafce, se crean automáticamente varios esquemas, entre ellos dbms_alert, dbms_assert, dbms_output, dbms_pipe, dbms_random, dbms_utility, oracle, plunit, plvchr, plvdate, plvlex, plvstr, plvsubst y utl_file. Antes de instalar la extensión Orafce, asegúrese de que no exista ningún esquema con el mismo nombre en la base de datos; de lo contrario, la instalación de la extensión fallará.

Funciones de Oracle

La tabla a continuación describe las funciones de Oracle compatibles con Hologres.

  • Funciones de fecha

    Función

    Descripción

    Ejemplo

    Valor de retorno

    add_months(day date, value int)

    Suma el número de meses especificado por el segundo parámetro a la fecha indicada en el primer parámetro y devuelve una fecha.

    SELECT add_months(current_date, 2);

    2022-05-21

    oracle_last_day(value date)

    Localiza el último día del mes al que pertenece la fecha especificada y devuelve una fecha.

    SELECT oracle_last_day('2022-05-01');

    2022-05-31

    next_day(value date, weekday text)

    Devuelve la fecha de un día específico. Dicho día es la primera ocurrencia del día de la semana indicado, contando a partir de la fecha especificada. El primer parámetro define la fecha de inicio y el segundo especifica el día de la semana (por ejemplo, Friday).

    SELECT next_day('2022-05-01', 'FRIDAY');

    2022-05-06

    next_day(value date, weekday integer)

    Devuelve la fecha de un día específico. Dicho día es la primera ocurrencia del día de la semana indicado, contando a partir de la fecha especificada. El primer parámetro define la fecha de inicio y el segundo especifica un número que representa un día de la semana. El rango va de 1 a 7, donde 1 corresponde a domingo, 2 a lunes y así sucesivamente hasta 7, que corresponde a sábado.

    • 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)

    Devuelve el número de meses transcurridos entre date1 y date2. Si date1 es posterior a date2, el valor de retorno es positivo; si date1 es anterior a date2, el valor es negativo.

    • 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)

    Trunca una marca de tiempo para devolver una fecha. El primer parámetro indica la marca de tiempo que se desea truncar y el segundo especifica la unidad de medida para el truncamiento. Un valor Y en el segundo parámetro trunca la marca de tiempo al primer día del año correspondiente, mientras que un valor Q la trunca al primer día del trimestre correspondiente.

    • SELECT TRUNC(current_date,'Y');
    • SELECT TRUNC(current_date,'Q');
    • 2022-01-01

    • 2022-01-01

    trunc(value timestamp with time zone)

    Devuelve una marca de tiempo basada en una fecha específica. De forma predeterminada, retorna una marca de tiempo con los valores de hora, minuto y segundo establecidos en cero.

    SELECT TRUNC('2022-03-01'::timestamp);

    2022-03-01 00:00:00

    round(value timestamp with time zone, fmt text)

    Redondea una marca de tiempo al valor más cercano según una unidad como semana o día.

    SELECT round('2022-02-22 13:11:22'::timestamp, 'YEAR');

    2022-01-01 00:00:00

    round(value timestamp with time zone)

    Redondea una marca de tiempo al valor más cercano tomando como base la unidad de día.

    SELECT round('2022-02-22 13:11:22'::timestamp);

    2022-02-23 00:00:00

    round(value date, fmt text)

    Devuelve una fecha redondeada según el formato especificado.

    • 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)

    Devuelve una fecha redondeada según el formato especificado.

    SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'));

    2000-02-27

  • Funciones de cadena

    Función

    Descripción

    Ejemplo

    Valor de retorno

    instr(str text, patt text, start integer, nth integer)

    Busca una subcadena dentro de una cadena. Si encuentra la subcadena, devuelve su posición; de lo contrario, retorna 0. El parámetro start indica la posición inicial de la búsqueda y el parámetro nth especifica la posición de la n-ésima ocurrencia de la subcadena.

    • SELECT instr('Hologres', 'o',1,2);
    • SELECT instr('Hologres', 'o',1,1);
    • 4

    • 2

    instr(str text, patt text, start integer)

    Devuelve la posición de la primera ocurrencia de una subcadena dentro de una cadena.

    SELECT instr('Hologres', 'o',4);

    4

    instr(str text, patt text)

    Busca una subcadena desde el inicio de una cadena.

    SELECT instr('Hologres', 'o');

    2

    plvstr.rvrs(str text, start integer, end integer)

    Invierte el orden de los caracteres en una cadena específica. El parámetro str define la cadena, mientras que los parámetros start y end determinan las posiciones inicial y final del segmento cuyos caracteres se invertirán.

    SELECT plvstr.rvrs('Hologres', 5,6);

    rg

    plvstr.rvrs(str text, start integer)

    Invierte el orden de los caracteres desde la posición indicada por el parámetro start hasta el final de la cadena especificada.

    SELECT plvstr.rvrs('Hologres', 4);

    sergo

    plvstr.rvrs(str text)

    Invierte el orden completo de una cadena.

    SELECT plvstr.rvrs('Hologres');

    sergoloH

    substr(str text, start integer)

    Extrae los caracteres desde la posición indicada por el parámetro start hasta el final de la cadena especificada.

    • SELECT substr('Hologres', 1);
    • SELECT substr('Hologres', 4);
    • Hologres

    • ogres

    substr(str text, start integer, len integer)

    Extrae un número determinado de caracteres a partir de la posición indicada por el parámetro start. El parámetro len especifica la cantidad de caracteres que se desean obtener.

    • SELECT substr('Hologres', 5, 5);
    • SELECT substr('Oracle functions', 5, 5);
    • gresle

    • lefun

  • Otras funciones

    Función

    Descripción

    Ejemplo

    Valor de retorno

    listagg(str text)

    Devuelve una cadena agrupada a partir de textos.

    SELECT listagg(t) FROM (VALUES('holo'), ('gres')) as l(t);

    hologres

    listagg(str text, str text)

    Devuelve una cadena agrupada a partir de textos y utiliza el valor del segundo parámetro como delimitador.

    SELECT listagg(t, '.') FROM (VALUES('holo'), ('gres')) as l(t);

    holo.gres

    concat(str text, str text)

    Une dos cadenas.

    SELECT concat('holo','gres');

    hologres

    • concat(str text, anyarray)

    • concat(anyarray, str text)

    • concat(anyarray, anyarray)

    Combina datos del mismo tipo o de tipos diferentes.

    • 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 el primer parámetro es de tipo de datos NUMERIC, devuelve el valor del primer parámetro; en caso contrario, devuelve el valor del segundo parámetro.

    • SELECT nanvl('NaN', 1.1);
    • SELECT nanvl('1.2', 1.1);
    • 1.1

    • 1.2

    bitand(num bigint, num bigint)

    Realiza una operación AND bit a bit sobre dos números binarios de tipo INTEGER y devuelve una sola fila.

    • SELECT bitand(1,3);
    • SELECT bitand(2,6);
    • SELECT bitand(4,6);
    • 1

    • 2

    • 4

    nvl2(anyelement, anyelement, anyelement)

    Si el valor del primer parámetro es nulo, devuelve el valor del tercer parámetro; de lo contrario, devuelve el valor del segundo parámetro.

    • SELECT nvl2(null, 1, 2);
    • SELECT nvl2(0, 1, 2);
    • 2

    • 1

    lnnvl(boolean)

    Si el valor del parámetro es nulo o falso, devuelve verdadero. Si el valor del parámetro es verdadero, devuelve falso.

    • SELECT lnnvl(null);
    • SELECT lnnvl(false);
    • SELECT lnnvl(true);
    • t

    • t

    • f

    sinh(num double precision)

    Devuelve el seno hiperbólico.

    SELECT sinh(0.1);

    0.100166750019844

    tanh(num double precision)

    Devuelve la tangente hiperbólica.

    SELECT tanh(3);

    0.995054753686731

    cosh(num double precision)

    Devuelve el coseno hiperbólico.

    SELECT cosh(0.2);

    1.02006675561908

    decode(expression, value, return [,value,return]... [, default])

    Busca un valor dentro de una expresión; si lo encuentra, devuelve dicho valor, y si no, retorna el valor predeterminado especificado.

    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
          alibaba
    • not found
          not found

    dump(anyelement)

    Devuelve un texto que contiene el código del tipo de datos, la longitud en bytes y la representación interna del primer parámetro.

    SELECT dump('hologres');

    Typ=25 Len=12: 48.0.0.0.104.111.108.111.103.114.101.115

    dump(anyelement, num integer)

    Devuelve un texto. El segundo parámetro especifica el sistema numérico utilizado para la representación interna del primer parámetro.

    • 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)

    Ordena los datos según un criterio específico.

    Ejecute las sentencias a continuación para crear una tabla e insertar datos en ella:

    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
          Bob
    • Anne
          Bob
          anne
          bob