A partir da versão V1.3 do Hologres, a extensão Orafce está disponível para oferecer suporte a diversas funções Oracle. Este tópico descreve a sintaxe e os detalhes das funções Oracle compatíveis com o Hologres.
Instale a extensão Orafce
Antes de utilizar qualquer função Oracle em um banco de dados do Hologres, execute o comando abaixo como superusuário para instalar a extensão Orafce. A instalação ocorre no nível do banco de dados, sendo necessária apenas uma vez por banco. Caso crie um novo banco de dados, será preciso executar o comando novamente:
-- Install the Orafce extension.
create extension if not exists orafce;
-- Uninstall the Orafce extension.
DROP EXTENSION orafce;
Ao instalar a extensão Orafce, diversos schemas são criados automaticamente, incluindo dbms_alert, dbms_assert, dbms_output, dbms_pipe, dbms_random, dbms_utility, oracle, plunit, plvchr, plvdate, plvlex, plvstr, plvsubst e utl_file. Antes de prosseguir com a instalação, verifique se não existem schemas com esses mesmos nomes no banco de dados. Caso contrário, a instalação da extensão Orafce falhará.
Funções Oracle
A tabela a seguir detalha as funções Oracle suportadas no Hologres.
-
Funções de data
Function
Description
Example
Return value
add_months(day date, value int)
Adiciona à data informada no primeiro parâmetro a quantidade de meses definida no segundo parâmetro, retornando uma nova data.
SELECT add_months(current_date, 2);2022-05-21
oracle_last_day(value date)
Retorna o último dia do mês correspondente à data especificada.
SELECT oracle_last_day('2022-05-01');2022-05-31
next_day(value date, weekday text)
Indica a data do próximo dia da semana especificado, contando a partir da data inicial fornecida. O primeiro parâmetro define a data base e o segundo, o nome do dia da semana (exemplo: Friday).
SELECT next_day('2022-05-01', 'FRIDAY');2022-05-06
next_day(value date, weekday integer)
Calcula a data do próximo dia da semana indicado numericamente, iniciando a contagem a partir da data base. O segundo parâmetro aceita valores de 1 a 7, onde 1 representa domingo, 2 representa segunda-feira e assim sucessivamente até 7 para 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)
Calcula a diferença em meses entre duas datas. O resultado é positivo quando date1 é posterior a date2 e negativo quando date1 é anterior a date2.
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 um timestamp conforme a unidade de medida especificada no segundo parâmetro. Utilize 'Y' para obter o primeiro dia do ano ou 'Q' para o primeiro dia do trimestre correspondente ao timestamp informado.
SELECT TRUNC(current_date,'Y');SELECT TRUNC(current_date,'Q');
2022-01-01
2022-01-01
trunc(value timestamp with time zone)
Retorna o timestamp da data especificada, zerando por padrão as horas, minutos e segundos.
SELECT TRUNC('2022-03-01'::timestamp);2022-03-01 00:00:00
round(value timestamp with time zone, fmt text)
Arredonda o timestamp para o valor mais próximo com base na unidade indicada, como semana ou dia.
SELECT round('2022-02-22 13:11:22'::timestamp, 'YEAR');2022-01-01 00:00:00
round(value timestamp with time zone)
Efetua o arredondamento do timestamp para o dia mais próximo.
SELECT round('2022-02-22 13:11:22'::timestamp);2022-02-23 00:00:00
round(value date, fmt text)
Devolve uma data arredondada conforme o formato definido.
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)
Fornece a data arredondada seguindo o formato padrão.
SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'));2000-02-27
-
Funções de string
Function
Description
Example
Return value
instr(str text, patt text, start integer, nth integer)
Busca uma substring dentro de uma string e retorna sua posição. Se não encontrar, devolve 0. O parâmetro start define onde a busca começa, enquanto nth indica qual ocorrência da substring deve ser localizada.
SELECT instr('Hologres', 'o',1,2);SELECT instr('Hologres', 'o',1,1);
4
2
instr(str text, patt text, start integer)
Localiza a primeira ocorrência de uma substring, iniciando a varredura a partir da posição determinada pelo parâmetro start.
SELECT instr('Hologres', 'o',4);4
instr(str text, patt text)
Procura pela substring desde o início da string fornecida.
SELECT instr('Hologres', 'o');2
plvstr.rvrs(str text, start integer, end integer)
Inverte a ordem dos caracteres no intervalo delimitado pelos parâmetros start e end dentro da string especificada em str.
SELECT plvstr.rvrs('Hologres', 5,6);rg
plvstr.rvrs(str text, start integer)
Reverte a sequência de caracteres começando na posição indicada por start até o final da string.
SELECT plvstr.rvrs('Hologres', 4);sergo
plvstr.rvrs(str text)
Inverte completamente a ordem de todos os caracteres da string.
SELECT plvstr.rvrs('Hologres');sergoloH
substr(str text, start integer)
Extrai os caracteres desde a posição definida em start até o término da string.
SELECT substr('Hologres', 1);SELECT substr('Hologres', 4);
Hologres
ogres
substr(str text, start integer, len integer)
Obtém uma quantidade específica de caracteres (definida em len) a partir da posição inicial indicada por start.
SELECT substr('Hologres', 5, 5);SELECT substr('Oracle functions', 5, 5);
gresle
lefun
-
Outras funções
Function
Description
Example
Return value
listagg(str text)
Agrupa valores de texto em uma única string concatenada.
SELECT listagg(t) FROM (VALUES('holo'), ('gres')) as l(t);hologres
listagg(str text, str text)
Concatena textos em uma única string, utilizando o segundo parâmetro como separador entre os valores.
SELECT listagg(t, '.') FROM (VALUES('holo'), ('gres')) as l(t);holo.gres
concat(str text, str text)
Une duas strings em uma só.
SELECT concat('holo','gres');hologres
concat(str text, anyarray)
concat(anyarray, str text)
concat(anyarray, anyarray)
Combina dados que podem ser do mesmo tipo ou 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)
Caso o primeiro parâmetro seja do tipo NUMERIC, retorna o seu próprio valor; caso contrário, devolve o valor do segundo parâmetro.
SELECT nanvl('NaN', 1,1);SELECT nanvl('1,2', 1,1);
1,1
1,2
bitand(num bigint, num bigint)
Executa uma operação lógica AND bit a bit entre dois números inteiros, retornando apenas uma linha.
SELECT bitand(1,3);SELECT bitand(2,6);SELECT bitand(4,6);
1
2
4
nvl2(anyelement, anyelement, anyelement)
Se o primeiro parâmetro for nulo, retorna o terceiro parâmetro. Do contrário, retorna o segundo.
SELECT nvl2(null, 1, 2);SELECT nvl2(0, 1, 2);
2
1
lnnvl(boolean)
Retorna true quando o parâmetro é nulo ou false. Retorna false apenas quando o parâmetro é true.
SELECT lnnvl(null);SELECT lnnvl(false);SELECT lnnvl(true);
t
t
f
sinh(num double precision)
Calcula o seno hiperbólico do valor informado.
SELECT sinh(0,1);0,100166750019844
tanh(num double precision)
Fornece a tangente hiperbólica do número especificado.
SELECT tanh(3);0,995054753686731
cosh(num double precision)
Determina o cosseno hiperbólico do valor passado.
SELECT cosh(0,2);1,02006675561908
decode(expression, value, return [,value,return]... [, default])
Compara uma expressão com valores de busca e retorna o resultado correspondente se houver correspondência, ou o valor padrão caso nenhuma condição seja atendida.
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)
Gera um texto contendo o código do tipo de dado, o tamanho em bytes e a representação interna do primeiro 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)
Retorna um texto onde o segundo parâmetro define o sistema numérico usado na representação interna do primeiro 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 os dados seguindo critérios específicos de idioma ou configuração.
Execute os comandos a seguir para criar uma tabela e inserir dados:
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