2016-03-21 13 views
0

私のk-medoidアルゴリズムの一部として、関数内にo_randomというレコード変数を宣言しました。この変数は、このクエリのように犯罪のテーブルからランダムな行を取得するために使用します。RECORD変数からの値の選択

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

しかし、以下のクエリでは、「レコードのデータ型で緯度を識別できませんでした」というエラーが表示されます。行を取得している犯罪テーブルには緯度というフィールドがあります。レコード変数からデータを誤って取得しようとしていますか?

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; 

は、スタック上のいくつかの解決策が見つかりましたが、それらのどれも..助けをいただければ幸いです動作するようには思えません。

+0

関連問題の解決策はここにも適用してログインしようとする作業をdosen't場合'' ... latitude =($ 1 :: text :: kmedoid_crimes_ '|| k ||')。latitude ... ''のように、execute文の中にもあります。あるいは、 'kmedoid_crimes_ *'テーブルに祖先、またはすべてのテーブルが従うタイプがある場合、そのレコードをUSING節のレコードにキャストすることができます。 – pozs

+0

こんにちは、あなたはそれが正しい作品です。ありがとう、 – Ponsietta

答えて

0

だけの推測

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; 

UPDATE:それはあなたがダブルキャスト「ハック」を使用することができ、http://www.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html

+0

いいえ、同じエラー。 o_random内で列名を見つけられないようです。データを出力していたのにデータが入っていることがわかりました – Ponsietta

関連する問題