2016-04-06 27 views
0

Am Coğrafi kodlama yüzlerce binlerce kayıt, bu sorgu, adres belirli bir satır için bir Lat ve Long değeri üretmiyorsa çalışırken çalışıyor bir hata gösteriyor "geçersiz giriş tamsayı için sözdizimi: "J199" ". Yani bu hatPsql - Geocoding sırasında adreste hata olduğunda satır atlamak için nasıl

(geocode_intersection (crashroad, crashreferenceroad, eyalet, şehir, eğer '', 1)

"J199" gibi bir değer, söz konusu satırı atlamak zorundadır üretir. Yani bunun nasıl ?

update nj.condition_3 
set (rating,new_address,points) = (COALESCE((g.geo).rating,-1),pprint_addy((g.geo).addy),st_astext(ST_SnapToGrid((g.geo).geomout, 0.000001))) 
-- Replace in limit value if error occurs 
FROM (SELECT addid FROM nj.condition_3 WHERE rating IS NULL ORDER BY addid LIMIT 3) As a 
LEFT JOIN (SELECT addid, (geocode_intersection(crashroad,crashreferenceroad,state,city,'',1)) As geo 
-- Replace in limit value if error occurs 
FROM nj.condition_3 As ag WHERE ag.rating IS NULL ORDER BY addid LIMIT 3) As g ON a.addid = g.addid 
WHERE a.addid = nj.condition_3.addid; 

cevap

0

bu hata aşmak için bir işlev yazdım. Şimdi sıra çalışıyor cezası.

CREATE OR REPLACE FUNCTION geocode_all_values() RETURNS VOID AS 
$$ 
DECLARE 
r record; 
g record; 
BEGIN 
FOR r IN select * from TableName where rating is null order by Sno 
LOOP 
BEGIN 
FOR g IN select * from geocode_intersection(r.Street1,r.Street2,r.state,r.city,'',1) 
LOOP 
    update TableName 
    set new_address = pprint_addy(g.addy), 
    rating = g.rating, 
    points = ST_AsTEXT(g.geomout) 
    where sno = r.sno; 
END LOOP; 
EXCEPTION WHEN OTHERS THEN 

END; 
END LOOP; 
END; 
$$ 
LANGUAGE plpgsql;