関数の複数の戻り値でテーブルを更新しようとしています。
TYPE を作成しました
CREATE OR REPLACE TYPE city_state AS OBJECT
(
city VARCHAR2(30),
state VARCHAR2(2)
);
/
このタイプの変数を返す関数があります。
CREATE OR REPLACE FUNCTION closestcity(lat IN NUMBER, lon IN NUMBER) RETURN city_state IS
...
都市、州、緯度、経度の列を含むテーブルを更新する必要があります。緯度/経度を使用して、関数を呼び出し、その結果を使用して都市/州の値を更新する必要があります。行ごとに関数を1回だけ呼び出したいのですが、更新する必要がある行はいくつかあります(都市がNULLであるとしましょう)
これは私がこれまでに得たものです
UPDATE (SELECT * FROM t t1 WHERE city IS NULL)
SET (city, state) = (
SELECT newcity.city, newcity.state FROM
( SELECT closestcity(latitude, longitude) newcity
FROM t t2
WHERE t1.latitude = t2.latitude AND
t1.longitude = t2.longitude)
);
しかし、無効な識別子エラーが発生します。私はそれを複雑にしすぎているように感じます。これに対する正しいアプローチは何でしょうか?