Pergunta

Nós temos uma tabela contendo as coordenadas, entre outras coisas. Nós utilizado para armazenar estes em dois campos de número (X e Y), mas temos agora substituído isso com um campo SDO_GEOMETRY. Para compatibilidade com versões anteriores, criamos uma visão (com o mesmo nome que a tabela usada para ter), onde fazemos:

criar ou substituir vista meas_pnt como selecione ..., m.position.SDO_POINT.X x_coordinate, m.position.SDO_POINT.Y y_coordinate de m meas_pnt_tab;

Isso funciona para ambos leitura e escrita, mas ao escrever números decimais para a vista, os decimais são perdidas. Eu não consigo descobrir o porquê. Alguém pode ajudar? O seguinte ilustra o problema:

actualização meas_pnt_tab m conjunto m.position.SDO_POINT.x = 2,3, onde meas_key = 1; seleccionar m.position.SDO_POINT.X de m meas_pnt_tab onde meas_key = 1; -> x é 2.3. Bom!

conjunto actualização meas_pnt x_coordinate = 2,3, onde meas_key = 1; seleccionar m.position.SDO_POINT.X de m meas_pnt_tab onde meas_key = 1; -.> X é 2

Foi útil?

Solução

Eu não posso reproduzir o erro. Isto é o que eu recebo:

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

Você pode postar sua CRIAR declarações?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top