0

Oracle 11gでテーブルを作成しました

  CREATE TABLE "SYSTEM"."CN_PLOT_OVERLAP" 
   (    "ID" NUMBER(6,0), 
    "UNIT_CODE" VARCHAR2(2 BYTE), 
    "SEASON_CNTRL" NUMBER(2,0), 
    "RYOT_CODEE" VARCHAR2(9 BYTE), 
    "SHARE_OR_PERC_VAL" NUMBER(1,2), 
    "PLOT_NO" VARCHAR2(15 BYTE), 
    "TOTAL_AREA" BINARY_FLOAT, 
    "LAT1" BINARY_FLOAT, 
    "LNG1" BINARY_FLOAT, 
    "LAT2" BINARY_FLOAT, 
    "LNG2" BINARY_FLOAT, 
    "LAT3" BINARY_FLOAT, 
    "LNG3" BINARY_FLOAT, 
    "LAT4" BINARY_FLOAT, 
    "LNG4" BINARY_FLOAT, 
    "POLYGON" "SDO_GEOMETRY", 
     CONSTRAINT "ID_PK" PRIMARY KEY ("ID")

そして、 polyを期待する値が既に挿入されています。Polygonの値を挿入すると、エラーが表示されます

**SQL エラー: ORA-00907: 右括弧がありません
1. 00000 - 「右括弧がありません」**

基本的に、農場の4つの座標があり、次のSQLを使用してこの列に挿入します

update cn_plot_overlap set polygon = (1,
  MDSYS.sdo_geometry(
  2003,
  4326,
  NULL,
  sdo_elem_info_array(1,1003,1),
  sdo_ordinate_array(27.79094,80.5275449,   
                      27.7912333,80.527696, 
                      27.79085,80.5285083,
                      27.790571,80.5283216,
                      27.79094,80.5275449
                      )
                    )
                    );
4

2 に答える 2

1

1の最初の行の は何UPDATEですか? そこにあるべきではありません。SDO_GEOMETRYオブジェクトの作成方法は次のとおりです。

update cn_plot_overlap set polygon = 
  MDSYS.sdo_geometry(
  2003,
  4326,
  NULL,
  sdo_elem_info_array(1,1003,1),
  sdo_ordinate_array(27.79094,80.5275449,   
                      27.7912333,80.527696, 
                      27.79085,80.5285083,
                      27.790571,80.5283216,
                      27.79094,80.5275449
                      )
                    );

SYSまた、ユーザーのスキーマにオブジェクトを作成することもお勧めしません。

于 2013-11-12T17:10:02.257 に答える
0

前の回答と同様に、更新の「1」の意味もわかりません。POLYGON列に入力するオブジェクトの識別子であると何らかの形で期待しない限り。その場合は、以下に示すように更新を記述する必要があります。

座標にも問題があることに注意してください。Oracle は (他の多くの人と同じように) 座標が (X,Y) の順序、つまり (経度、緯度) で提供されることを期待しています。書かれているように、あなたの農場は北極海のどこかにあります! 座標を正しく記述すると、インドに正しく配置されます。

update cn_plot_overlap set polygon = 
  sdo_geometry(
    2003,
    4326,
    NULL,
    sdo_elem_info_array(1,1003,1),
    sdo_ordinate_array(
      80.5275449,27.79094,   
      80.527696,27.7912333, 
      80.5285083,27.79085,
      80.5283216,27.790571,
      80.5275449,27.79094
    )
  )
where id = 1;

テーブル内のすべての行の列 LATn、LNGn で使用可能な値を使用してポリゴン列を更新する場合は、次の構文を使用します。

update cn_plot_overlap set polygon = 
  sdo_geometry(
    2003,
    4326,
    NULL,
    sdo_elem_info_array(1,1003,1),
    sdo_ordinate_array(
      lng1,lat1,
      lng2,lat2,
      lng3,lat3,
      lng4,lat4,
      lng1,lat1
    )
  );

これは、LATn、LNGn 列が予想される順序 (反時計回り) の角を表すと仮定しています。そうでない場合は、座標の順序を逆にします。

最後に、すでに述べたように、システム スキーマでオブジェクト (テーブル) を作成しないでください。これは、将来のトラブルの確実な保証です。独自のスキーマでテーブルを作成します。

于 2013-11-13T23:55:34.167 に答える