代码之家  ›  专栏  ›  技术社区  ›  mbcaradima

创建空间网络时出现SQL语法错误

  •  0
  • mbcaradima  · 技术社区  · 13 年前

    我正试图通过FME Desktop从导入Oracle数据库的shapefile(代表街道中心线)创建一个空间网络。“CENTRELINES”空间对象包含一个GEOM列,我想将其用作网络分析的基础,以基于路线距离作为成本属性在养老院(点)之间分配救护车设施(点)。任何关于在Oracle Spatial中解决这个病态问题的方法的建议都是受欢迎的,但主要问题是我是SQL的初学者。我使用过Oracle的 documentation 以编写以下SQL语句:

    -- create an LRS geometry network
    EXEC SDO_NET.CREATE_LRS_NETWORK(
      'LRS_net', -- network name
      'CENTRELINES', -- LRS geometry table name
      'GEOM', -- LRS geometry column name
      1, -- number of hierarchy levels
      FALSE, -- directed link?
      TRUE -- node with cost?
      );
    

    脚本输出以下内容:

    Error starting at line 2 in command:
    EXEC SDO_NET.CREATE_LRS_NETWORK(
    Error report:
    ORA-06550: line 1, column 34:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    
       ( ) - + case mod new not null <an identifier>
       <a double-quoted delimited-identifier> <a bind variable>
       table continue avg count current exists max min prior sql
       stddev sum variance execute multiset the both leading
       trailing forall merge year month day hour minute second
       timezone_hour timezone_minute timezone_region timezone_abbr
       time timestamp interval date
       <a string literal with character set specification>
    06550. 00000 -  "line %s, column %s:\n%s"
    *Cause:    Usually a PL/SQL compilation error.
    *Action:
    
    ...
    
    Error starting at line 9 in command:
    )
    Error report:
    Unknown Command
    

    我知道第2行产生了错误:

    PLS-00103: Encountered the symbol ";" when expecting one of the following...
    

    既然结束SQL查询需要分号,为什么会出现这个问题?

    编辑:以下脚本通过添加开始/结束生成网络:

    begin
    SDO_NET.CREATE_LRS_NETWORK(
      'LRS_net', 
      'CENTRELINES', 
      'GEOM', 
      1, 
      FALSE, 
      TRUE);
    end;
    

    谢谢你的帮助!

    1 回复  |  直到 13 年前
        1
  •  3
  •   Alex Poole    13 年前

    如中所述 documentation ,SQL*Plus execute 命令通常必须在一行中输入:

    如果由于PL/SQL的原因,EXECUTE命令无法容纳一行 语句,请使用SQL*Plus连续字符(连字符)。

    它实际上试图在引擎盖下运行的是一个翻译

    BEGIN
        SDO_NET.CREATE_LRS_NETWORK(;
    END;
    /
    

    …这(可能很明显在这样写的时候)不是有效的PL/SQL。与空间调用本身无关。如果您确实想将其拆分为多行,可以使用显式 begin / end 而不是速记 exec .

    第二个问题可能表明您已经多次运行过短版本,尽管这不是我非常熟悉的功能;但与初始分号错误无关。(此外,结束一个 SQL语言 声明,但这是另一次的细节…)。