Mostrando entradas con la etiqueta PL/SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta PL/SQL. Mostrar todas las entradas

PL/SQL: Agrupar concatenando

Para concatenar cadenas de diferentes filas de un grupo devueltas a partir de una consulta SQL de forma similar a aplicar count() o max() con números, usamos la función concat_group. De esta forma reducimos la cantidad de filas a una única.

Sus parámetros son dos:
 * Un cursor sobre una consulta SQL para tomar la columna con la cadena a concatenar
 * Una cadena que se usara como separador

Ejemplo:
select concat_group(cursor(
 select to_char(nombre)
 from usuarios 
where rownum < 400));

Limitación: La cadena devuelta está limitada a 32760 caracteres que es la cantidad máxima de bytes que permite el tipo varchar2.


create or replace function concat_group(
p_cursor in sys_refcursor, 
p_separador varchar2 default ' ')
is return varchar2
  salida varchar2(32760);
  cadena varchar2(32760);
begin
  loop fetch p_cursor into cadena;
    exit when p_cursor%NOTFOUND;
    salida := salida||p_separador||cadena;
  end loop; 
  close p_cursor;
  return ltrim(substr(salida, length(p_separador), length(salida)));
end;

PL/SQL: Pasar una cadena a MD5

create or replace function cadena_a_md5(cadena in varchar2) 
return varchar2 
is
 cadena_hex varchar2(32);
 ofuscacion varchar2(16);
begin
 ofuscacion := 
dbms_obfuscation_toolkit.md5(input_string => cadena);
 select lower(rawtohex(ofuscacion)) into cadena_hex 
from dual;
 return cadena_hex;
end;