Потеря десятичных дробей при использовании Oracle SDO_POINT в представлении - PullRequest
0 голосов
/ 05 августа 2009

Помимо всего прочего, у нас есть таблица, содержащая координаты. Мы привыкли хранить их в двух числовых полях (x и y), но теперь мы заменили это полем SDO_GEOMETRY. Для обратной совместимости мы создали представление (с тем же именем, что и у таблицы), где мы делаем:

создать или заменить представление measure_pnt как выберите ..., m.position.SDO_POINT.X x_coordinate, m.position.SDO_POINT.Y y_coordinate из мера_пнт_таб м;

Это работает как для чтения, так и для записи, но при записи десятичных чисел в представление, десятичные дроби теряются. Я не могу понять, почему. Кто-нибудь может помочь? Следующее иллюстрирует проблему:

обновить measure_pnt_tab m set m.position.SDO_POINT.x = 2.3, где measure_key = 1; выберите m.position.SDO_POINT.X из measure_pnt_tab m, где measure_key = 1; -> х равен 2,3. Хорошо!

обновить набор_измерений x_coordinate = 2.3, где показатель_ключа = 1; выберите m.position.SDO_POINT.X из measure_pnt_tab m, где measure_key = 1; -> х равен 2.

1 Ответ

1 голос
/ 05 августа 2009

Я не могу воспроизвести вашу ошибку. Вот что я получаю:

SQL> CREATE TABLE meas_pnt_tab (position sdo_point_type, meas_key NUMBER);

Table created
SQL> INSERT INTO meas_pnt_tab (position, meas_key) 
  2  VALUES (sdo_point_type(2.3,0,0), 1);

1 row inserted
SQL> SELECT m.position.X FROM meas_pnt_tab m WHERE meas_key=1;

POSITION.X
----------
       2,3
SQL> CREATE OR REPLACE VIEW meas_pnt AS
  2  SELECT m.position.X x_coordinate,
  3         m.position.Y y_coordinate,
  4         m.meas_key
  5    FROM meas_pnt_tab m;

View created
SQL> UPDATE meas_pnt SET x_coordinate = 2.4 WHERE meas_key=1;

1 row updated
SQL> SELECT m.position.X FROM meas_pnt_tab m WHERE meas_key=1;

POSITION.X
----------
       2,4

Можете ли вы опубликовать свои заявления CREATE?

...