2016-03-21 32 views
0

K-medoid algoritmamın bir parçası olarak, bu sorgudaki gibi bir suç tablosundan alınan rastgele bir satırı saklamak için kullandığım işlevimde o_random adlı bir kayıt değişkeni bildirdim:RECORD değişkeninden değerler seçme

EXECUTE 'SELECT * FROM algorithms.kmedoid_crimes_' ||k||' WHERE 
cluster_id='||k_count||' OFFSET floor(random()*'||row_count||') LIMIT 1' 
INTO o_random; 

Ancak, aşağıdaki sorgu "kayıt veri türünde" enlem "sütununu belirleyemedi" diyerek bana bir hata veriyor. Bu satırları alıyorum ki, kesinlikle enlem olarak adlandırılan bir alan var. Bu yüzden kayıt değişkeninden gelen verileri yanlış anlamaya çalışıyorum diye düşünüyorum.

EXECUTE 'UPDATE algorithms.km_cluster_centres_' ||k||' 
SET latitude = $1.latitude, longitude = $1.longitude, geom = 
ST_Transform(ST_SetSRID(ST_MakePoint($1.longitude, $1.latitude), 4326),3435) 
WHERE id=' ||k_count 
USING o_random; 

yığın bazı çözümler bulundu ancak bunların hiçbiri .. yardım mutluluk duyacağız çalışmıyor gibi görünüyor.

+0

ilgili söz konusu çözüm burada da geçerlidir ile oturum açmaya çalışması kaplamaz ederse execute deyiminin içinde de, '' ... latitude = ($ 1 :: text :: kmedoid_crimes_ '|| k ||'). enlem ... ''. Veya, eğer 'kmedoid_crimes_ * 'tablonuzun ataları varsa veya tüm tabloların izlediği bir türü varsa, bu kaydı USING maddesinde de kullanabilirsiniz. – pozs

+0

Merhaba, haklısınız. Teşekkür – Ponsietta

cevap

0

Sadece bir tahmin

EXECUTE 'UPDATE algorithms.km_cluster_centres_' || quote_literal(k) ||' 
    SET latitude = ($1).latitude, longitude = ($1).longitude, geom = 
    ST_Transform(ST_SetSRID(ST_MakePoint(($1).longitude,($1).latitude), 4326),3435) 
    WHERE id=' || quote_literal(k_count) 
    USING o_random; 

GÜNCELLEME: Eğer çift döküm "kesmek" kullanabilirsiniz, http://www.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html

+0

hayır, aynı hata. Sadece o_random içinde sütun isimlerini bulmak için görünmüyor .. Bunun içinde veri var olduğunu biliyorum çünkü ben çıkışını denedim – Ponsietta