fix(address): ORA-06502 pe apart/scara/etaj token lung + strip city+region din adresa GoMag
Doua root cause-uri pentru ORA-12899 la importul comenzii #485841056: 1. Oracle ORA-06502: v_apart/v_scara/v_bloc/v_etaj in cauta_sau_creeaza_adresa declarate VARCHAR2(10/20/30) → Oracle mostenea constrangerea pe OUT parametrii din parseaza_adresa_semicolon → crash INAINTE de fix-ul overflow de la linia 521. Fix: marite la VARCHAR2(100). 2. Python format_address_for_oracle stripuia doar city exact, nu si 'city region' sau 'region city'. GoMag trimite adresa cu suffix 'Municipiul Bucuresti Bucuresti' (city+region) → token urias pentru apartament → declansa ORA-06502 de mai sus. Fix: incearca toate combinatiile city+region, region+city, city, region. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -93,14 +93,23 @@ def format_address_for_oracle(address: str, city: str, region: str) -> str:
|
|||||||
city_clean = clean_web_text(city)
|
city_clean = clean_web_text(city)
|
||||||
address_clean = clean_web_text(address)
|
address_clean = clean_web_text(address)
|
||||||
address_clean = " ".join(address_clean.replace(",", " ").split())
|
address_clean = " ".join(address_clean.replace(",", " ").split())
|
||||||
# Strip city name from end of address (users often type it)
|
# Strip city/region suffixes users often append to address
|
||||||
if city_clean:
|
if city_clean or region_clean:
|
||||||
addr_upper = address_clean.upper().rstrip()
|
addr_upper = address_clean.upper().rstrip()
|
||||||
city_upper = city_clean.upper().strip()
|
city_upper = city_clean.upper().strip() if city_clean else ""
|
||||||
if addr_upper.endswith(city_upper):
|
region_upper = region_clean.upper().strip() if region_clean else ""
|
||||||
stripped = address_clean[:len(address_clean.rstrip()) - len(city_upper)].rstrip()
|
for pattern in [
|
||||||
if stripped: # don't strip if nothing remains
|
(city_upper + " " + region_upper).strip(),
|
||||||
address_clean = stripped
|
(region_upper + " " + city_upper).strip(),
|
||||||
|
city_upper,
|
||||||
|
region_upper,
|
||||||
|
]:
|
||||||
|
if pattern and addr_upper.endswith(pattern):
|
||||||
|
stripped = address_clean[:len(address_clean.rstrip()) - len(pattern)].rstrip()
|
||||||
|
if stripped:
|
||||||
|
address_clean = stripped
|
||||||
|
addr_upper = address_clean.upper().rstrip()
|
||||||
|
break
|
||||||
return f"JUD:{region_clean};{city_clean};{address_clean}"
|
return f"JUD:{region_clean};{city_clean};{address_clean}"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
|
|||||||
-- COM/ORAS/MUN ignorate (deja in p_localitate din GoMag city)
|
-- COM/ORAS/MUN ignorate (deja in p_localitate din GoMag city)
|
||||||
-- 23.04.2026 - hardening: SUBSTR(1,10) neconditionat dupa split, blocheaza
|
-- 23.04.2026 - hardening: SUBSTR(1,10) neconditionat dupa split, blocheaza
|
||||||
-- overflow rezidual pe prefix lung fara spatiu in primii 10 char.
|
-- overflow rezidual pe prefix lung fara spatiu in primii 10 char.
|
||||||
|
-- 28.04.2026 - fix ORA-06502: v_bloc/scara/apart/etaj in cauta_sau_creeaza_adresa
|
||||||
|
-- marite la VARCHAR2(100) — Oracle OUT param mostenea constrangerea
|
||||||
|
-- VARCHAR2(10) si cadea pe "apartament 140 interfon 140 Municipiul..."
|
||||||
|
|
||||||
-- ====================================================================
|
-- ====================================================================
|
||||||
-- CONSTANTS
|
-- CONSTANTS
|
||||||
@@ -975,10 +978,10 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
|
|||||||
v_strada VARCHAR2(1000);
|
v_strada VARCHAR2(1000);
|
||||||
v_numar VARCHAR2(1000);
|
v_numar VARCHAR2(1000);
|
||||||
v_sector VARCHAR2(100);
|
v_sector VARCHAR2(100);
|
||||||
v_bloc VARCHAR2(30);
|
v_bloc VARCHAR2(100);
|
||||||
v_scara VARCHAR2(10);
|
v_scara VARCHAR2(100);
|
||||||
v_apart VARCHAR2(10);
|
v_apart VARCHAR2(100);
|
||||||
v_etaj VARCHAR2(20);
|
v_etaj VARCHAR2(100);
|
||||||
v_id_tara NUMBER(10);
|
v_id_tara NUMBER(10);
|
||||||
v_principala NUMBER(1);
|
v_principala NUMBER(1);
|
||||||
begin
|
begin
|
||||||
|
|||||||
Reference in New Issue
Block a user