Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在sdo_geomety数据类型列中插入记录时缺少右括号_Sql_Oracle_Oracle11g_Oracle Spatial - Fatal编程技术网

Sql 在sdo_geomety数据类型列中插入记录时缺少右括号

Sql 在sdo_geomety数据类型列中插入记录时缺少右括号,sql,oracle,oracle11g,oracle-spatial,Sql,Oracle,Oracle11g,Oracle Spatial,我已经在Oracle11g中创建了一个表 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" VAR

我已经在Oracle11g中创建了一个表

  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")
并且已经插入了需要多边形的值。现在,当我为多边形插入值时,它显示一个错误

**SQL Error: ORA-00907: missing right parenthesis 1. 00000 - "missing right parenthesis"**
您的
更新的第一行中的
1
是什么?它不应该在那里。以下是创建
SDO\u几何体的方法
对象:

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
用户模式中创建任何对象。

与前面的答案一样,我也不理解更新中“1”的含义。除非您希望它是要填充多边形列的对象的标识符。如果是这样,那么您需要编写如下所示的更新

请注意,坐标也有问题: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、LGN列中的可用值更新多边形列,请使用以下语法:

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、LGN列表示预期序列中的角(即逆时针)。如果不是这样,只需颠倒坐标顺序即可

最后,正如前面提到的:永远,永远,永远,永远不要在任何系统模式中创建对象(表)!!!这是未来麻烦的可靠保证。在您自己的模式中创建表

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
    )
  );