2016-10-15 5 views
0
SQL> SELECT sighting_id, distance 
FROM sightings 
WHERE distance = SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2)) 
GROUP BY sighting_id, distance; 

エラーが発生しました。PLS-306:「OGC_DISTANCE」を呼び出す際に、引数またはタイプが間違っています。何か案は?SQLの距離式

+0

あなたは 'sightings'テーブルスキーマを投稿できますか? – andrews

+0

こんにちはアンドリュース、テーブルスキーマで編集。 – Ben

+0

しかし、実際に選択しようとしている「距離」列はどこですか? :) – andrews

答えて

0

テーブルに問題がありますが、列の距離はありません。あなたが望む限り、あなたはしたいと思っています:

SELECT sighting_id, SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2)) as distance 
FROM sightings 
GROUP BY sighting_id, SQRT(POWER(latitude -(-28),2) + POWER(longitude -(151),2)); 
+0

コメントをチェックすると、OPは更新されたSQLをコメントに入れました。質問本体には、実際には距離の列がありません。しかし、距離の列でも、彼はそのエラーを取得します。だから問題は異なります。 – andrews

+0

が編集されました。 Sorry group byはエイリアスではない計算に基づいている必要があります。それは私が言ったこと。そのコメントが書き込まれていないときに@LukeWoodwardがロードされていません。 おそらくそれはより多くのコメントを見ることに隠されていたので、なぜ私は気付いていなかったのですか? – Kacper

+0

@andrews私は式で数式によってグループ内の距離を置き換えました。そしてそれを試してみるといいでしょう。距離に関する参照はまったくありません。ちょうど別名。 – Kacper

1

「距離」列に別の名前を使用すると、内部のGEO関数または同義語がOracle DBにすでに定義されているように見えます。

NULL緯度と経度の発生にcoalesce()ラッパーを追加するか、または「AND latitude IS NOT NULL AND」を追加する必要があります。 WHERE句に経度IS NOT NULL "が含まれています。

+0

私はそれが問題だとは思っていません。エラーメッセージには、DISTANCEではなくOGC_DISTANCEと表示されます。オラクルはこれらのことを非常に正確にしています。それで:** function **の名前は、テーブルやカラムの名前としてはうまく使えます(非常に悪いことですが)。関数呼び出しが常に開いているかっこが続くため、パーサーは2つを明確に区別できます。したがって、DISTANCEが関数名であっても、列名として使用するとそのエラーは発生しません。 – mathguy

+0

@mathguy、あなたのポイントは関数に関しては真実かもしれませんが、OPのDBに定義されているOracleのクエリーで使用しようとしている '距離'の同義語が存在すると思います。 – andrews

+0

...シノニムについて... OPが列のエイリアスを変更した場合、OPが何を見つけるかを見てみましょう。 – mathguy