2009-08-05 3 views
0

Wir haben eine Tabelle mit Koordinaten, unter anderem. Früher haben wir diese in zwei Zahlenfeldern (x und y) gespeichert, aber wir haben dies nun durch ein Feld SDO_GEOMETRY ersetzt. Aus Gründen der Abwärtskompatibilität haben wir eine Ansicht erstellt (mit dem gleichen Namen wie die Tabelle):Verlust von Dezimalstellen bei Verwendung von Oracle SDO_POINT in einer Ansicht

Ansicht erstellen oder ersetzen meas_pnt als select ..., m.position.SDO_POINT.X x_coordinate , m.position.SDO_POINT.Y y_coordinate von meas_pnt_tab m;

Dies funktioniert sowohl beim Lesen als auch beim Schreiben, aber beim Schreiben von Dezimalzahlen in die Ansicht gehen die Dezimalstellen verloren. Ich kann nicht herausfinden warum. Kann jemand helfen? Folgendes veranschaulicht das Problem:

update meas_pnt_tab m gesetzt m.position.SDO_POINT.x = 2.3 wo meas_key = 1; Wählen Sie m.position.SDO_POINT.X aus meas_pnt_tab m mit meas_key = 1; -> x ist 2.3. Gut!

update meas_pnt gesetzt x_koordinate = 2.3 wo meas_key = 1; Wählen Sie m.position.SDO_POINT.X aus meas_pnt_tab m mit meas_key = 1; -> x ist 2.

Antwort

1

Ich kann Ihren Fehler nicht reproduzieren. Dies ist, was ich bekommen:

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 

Können Sie Ihre CREATE-Anweisungen schreiben?

+0

Danke, Vincent. Ich habe deine Aussagen versucht und sie arbeiten auch für mich. Ich muss untersuchen, was wir anders machen. –

+0

Ich dachte, die Transformation wurde vollständig durch die Ansicht selbst gemacht, aber wir hatten einen "statt update" Auslöser auf der Ansicht, die einige Dinge getan hat. Und es verwendete intern Integer-Variablen. Deshalb wurden die Dezimalstellen abgeschnitten. Aber danke, bis Sie geantwortet haben, dachte ich, dass etwas mit dem SDO_POINT-Datentyp passiert. –

Verwandte Themen