fix(plsql): encoding-safe strip_diacritics + localitate match in address lookup
TRANSLATE with UTF-8 literals was silently corrupted when compiled via Windows sqlplus (ĂăÂâÎî→����, ȘșȚț→????). Replaced with REPLACE/UNISTR for comma-below→cedilla normalization + CONVERT US7ASCII. Also applied strip_diacritics to localitate/judet in TIER 1 lookup and locality search (was only on strada), fixing 'FĂLTICENI' vs 'FALTICENI' BINARY mismatch. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,8 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
|
|||||||
-- 02.04.2026 - parser adrese: extrage APARTAMENT/SCARA/ETAJ embedded in strada (fix "Nr17 apartament 8")
|
-- 02.04.2026 - parser adrese: extrage APARTAMENT/SCARA/ETAJ embedded in strada (fix "Nr17 apartament 8")
|
||||||
-- 02.04.2026 - fallback cautare PF cu permutari nume (evita duplicate la swap firstname/lastname)
|
-- 02.04.2026 - fallback cautare PF cu permutari nume (evita duplicate la swap firstname/lastname)
|
||||||
-- 06.04.2026 - eliminat TIER 2 cautare adresa (judet+loc fara strada) — creeaza adresa noua cand strada difera
|
-- 06.04.2026 - eliminat TIER 2 cautare adresa (judet+loc fara strada) — creeaza adresa noua cand strada difera
|
||||||
|
-- 06.04.2026 - fix strip_diacritics: UNISTR encoding-safe (TRANSLATE cu UTF-8 literal se corupea pe Windows)
|
||||||
|
-- 06.04.2026 - fix TIER 1: strip_diacritics si pe localitate (nu doar strada)
|
||||||
|
|
||||||
-- ====================================================================
|
-- ====================================================================
|
||||||
-- CONSTANTS
|
-- CONSTANTS
|
||||||
@@ -160,15 +162,23 @@ END PACK_IMPORT_PARTENERI;
|
|||||||
CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
||||||
|
|
||||||
-- 01.04.2026 - strip_diacritics la stocare adrese si parteneri
|
-- 01.04.2026 - strip_diacritics la stocare adrese si parteneri
|
||||||
|
-- 06.04.2026 - fix: UNISTR encoding-safe (TRANSLATE cu UTF-8 literal se corupea pe Windows sqlplus)
|
||||||
|
-- Hybrid: REPLACE comma-below Ș/Ț → cedilla Ş/Ţ, apoi CONVERT US7ASCII (strips Ă/Â/Î/Ş/Ţ)
|
||||||
FUNCTION strip_diacritics(p_text IN VARCHAR2) RETURN VARCHAR2 IS
|
FUNCTION strip_diacritics(p_text IN VARCHAR2) RETURN VARCHAR2 IS
|
||||||
BEGIN
|
BEGIN
|
||||||
IF p_text IS NULL THEN
|
IF p_text IS NULL THEN
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN TRANSLATE(
|
RETURN CONVERT(
|
||||||
UPPER(TRIM(p_text)),
|
UPPER(TRIM(
|
||||||
'ĂăÂâÎîȘșȚțŞşŢţ',
|
REPLACE(REPLACE(REPLACE(REPLACE(
|
||||||
'AAAAIISSTTSSTT'
|
p_text,
|
||||||
|
UNISTR('\0218'), UNISTR('\015E')), -- Ș → Ş (comma-below → cedilla)
|
||||||
|
UNISTR('\0219'), UNISTR('\015F')), -- ș → ş
|
||||||
|
UNISTR('\021A'), UNISTR('\0162')), -- Ț → Ţ
|
||||||
|
UNISTR('\021B'), UNISTR('\0163')) -- ț → ţ
|
||||||
|
)),
|
||||||
|
'US7ASCII', 'AL32UTF8'
|
||||||
);
|
);
|
||||||
END strip_diacritics;
|
END strip_diacritics;
|
||||||
|
|
||||||
@@ -933,14 +943,15 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
|||||||
v_etaj);
|
v_etaj);
|
||||||
|
|
||||||
-- 01.04.2026 - cautare adresa pe strada + diacritics + id_loc validation
|
-- 01.04.2026 - cautare adresa pe strada + diacritics + id_loc validation
|
||||||
-- TIER 1: county + city + street (diacritics normalized) + valid id_loc
|
-- 06.04.2026 - strip_diacritics si pe localitate (fix: 'FĂLTICENI' vs 'FALTICENI')
|
||||||
|
-- TIER 1: county + city + street (all diacritics normalized) + valid id_loc
|
||||||
begin
|
begin
|
||||||
select id_adresa into p_id_adresa from (
|
select id_adresa into p_id_adresa from (
|
||||||
select id_adresa
|
select id_adresa
|
||||||
from vadrese_parteneri
|
from vadrese_parteneri
|
||||||
where id_part = p_id_part
|
where id_part = p_id_part
|
||||||
and judet = v_judet
|
and strip_diacritics(judet) = strip_diacritics(v_judet)
|
||||||
and localitate = v_localitate
|
and strip_diacritics(localitate) = strip_diacritics(v_localitate)
|
||||||
and strip_diacritics(strada) = strip_diacritics(v_strada)
|
and strip_diacritics(strada) = strip_diacritics(v_strada)
|
||||||
and id_loc IS NOT NULL
|
and id_loc IS NOT NULL
|
||||||
order by principala desc, id_adresa desc
|
order by principala desc, id_adresa desc
|
||||||
@@ -963,14 +974,14 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
|||||||
v_id_judet := N_ID_JUD_DEFAULT;
|
v_id_judet := N_ID_JUD_DEFAULT;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
-- caut localitatea
|
-- caut localitatea (strip_diacritics pe ambele parti — fix encoding mismatch)
|
||||||
begin
|
begin
|
||||||
select id_loc, id_judet, id_tara
|
select id_loc, id_judet, id_tara
|
||||||
into v_id_localitate, v_id_judet, v_id_tara
|
into v_id_localitate, v_id_judet, v_id_tara
|
||||||
from (select id_loc, id_judet, id_tara, rownum rn
|
from (select id_loc, id_judet, id_tara, rownum rn
|
||||||
from syn_nom_localitati l
|
from syn_nom_localitati l
|
||||||
where id_judet = v_id_judet
|
where id_judet = v_id_judet
|
||||||
and localitate = v_localitate
|
and strip_diacritics(localitate) = strip_diacritics(v_localitate)
|
||||||
and inactiv = 0
|
and inactiv = 0
|
||||||
and sters = 0
|
and sters = 0
|
||||||
order by localitate)
|
order by localitate)
|
||||||
|
|||||||
Reference in New Issue
Block a user