You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

82 lines
2.0 KiB

return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_from_table
p1:
type: text
name: i_to_table
src: |
DECLARE
_sqlcmd TEXT;
result TEXT;
BEGIN
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = i_to_table) THEN
_sqlcmd = '
CREATE TEMP TABLE ' || i_to_table || '
(
XXCENT numeric,
XXCETS numeric,
XXCODO text,
XXCODE text,
in_code text,
in_code_original text,
in_texte text,
in_id bigint
);
CREATE INDEX ' || i_to_table || '_i1 ON ' || i_to_table || ' USING btree(XXCODO)
'
;
EXECUTE _sqlcmd;
END IF;
-- Table de correspondance
_sqlcmd = '
TRUNCATE ' || i_to_table || '
;
INSERT INTO ' || i_to_table || '
SELECT
XXCENT,
XXCETS,
XXCODO,
XXCODE,
XXCODE ||
CASE WHEN base.cti_soundex_nom(replace(XXTEXT,''.'','''')) <> XXTEXT_STD_soundex THEN
''('' || XXCENT || ''.'' || XXCETS || '')''
ELSE '''' END
AS in_code,
XXCODO ||
CASE WHEN base.cti_soundex_nom(replace(XXTEXT,''.'','''')) <> XXTEXT_STD_soundex THEN
''_'' || to_char(XXCENT,''FM000'') || to_char(XXCETS,''FM000'')
ELSE '''' END
AS in_code_original,
CASE WHEN base.cti_soundex_nom(replace(XXTEXT,''.'','''')) <> XXTEXT_STD_soundex THEN XXTEXT ELSE XXTEXT_STD END AS in_texte,
0::bigint AS in_id
FROM
' || i_from_table || '
JOIN
(
SELECT XXCODE AS XXCODE_STD,
(MAX(Array[key, XXTEXT_soundex]))[2] AS XXTEXT_STD_soundex,
(MAX(Array[key, XXTEXT_STD]))[2] AS XXTEXT_STD
FROM
(
SELECT XXCODE,
base.cti_soundex_nom(replace(XXTEXT,''.'','''')) AS XXTEXT_soundex,
MIN(XXTEXT) AS XXTEXT_STD,
to_char(count(*),''FM0000000000'') || MIN(to_char(XXCENT,''FM000'') || to_char(XXCETS,''FM000'')) AS key
FROM ' || i_from_table || '
GROUP BY 1,2
) subview
GROUP BY 1
) cti_shs_multicode_std
ON XXCODE = XXCODE_STD
ORDER BY 3,5
;'
;
EXECUTE _sqlcmd;
RETURN 'OK';
END;