用mdsys用户登录sql*plus
grant select on sdo_geom_metadata_table to mapinfo;
commit;

解决方案 »

  1.   

    你的意思是把mdsys的select权限赋给mapinfo这个用户,便可以通过了么?
    待我测试再给你答复:)
      

  2.   

    权限问题,同意bzszp(SongZip),但还要注意SDO_GEOM.SDO_LENGTH 的权限。
      

  3.   

    还是不行啊,我已经把MDSYS在sdo_geom_metadata_table上的SELECT权限给了MAPINFO用户,可是编译仍然显示invalid。
      

  4.   

    SDO_GEOM.SDO_LENGTH --->>>  SDO_GEOM.LENGTH
      

  5.   

    16:25:38 jlanzpa817>CREATE OR REPLACE PROCEDURE UPDATE_XZDL_CD 
    16:25:49   2  as
    16:25:49   3    TABLENAME  VARCHAR2(20);
    16:25:49   4    COLUMNNAME VARCHAR2(10);
    16:25:49   5    tmp        SDO_DIM_ARRAY;
    16:25:49   6  begin
    16:25:49   7    TABLENAME:='XZDL01010301';
    16:25:49   8    COLUMNNAME:='GEOLOC';
    16:25:50   9    select sdo_diminfo into tmp from mdsys.sdo_geom_metadata_table 
    16:25:50  10    where sdo_table_name = 'TABLENAME' and sdo_column_name = 'GEOLOC';
    16:25:50  11    update xzdl01010301 set xzcd = SDO_GEOM.SDO_LENGTH(GEOLOC,tmp);
    16:25:50  12  exception when others then 
    16:25:50  13    raise;
    16:25:50  14  end;
    16:25:50  15  /警告: 创建的过程带有编译错误。已用时间:  00: 00: 00.50
    16:25:51 jlanzpa817>sho err
    PROCEDURE UPDATE_XZDL_CD 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    11/3     PL/SQL: SQL Statement ignored
    11/54    PLS-00201: 必须说明标识符 'GEOLOC'
    16:25:53 jlanzpa817>
      

  6.   

    过程中的GEOLOC应该加上单引号,即为'GEOLOC'
      

  7.   

    我检查了一下,错误是出在   select sdo_diminfo from Mdsys.sdo_geom_metadata_table where (sdo_table_name = TABLENAME) and (sdo_column_name = 'GEOLOC')这一句上而select sdo_table_name into Tablename from Mdsys.sdo_geom_metadata_table where ....是可以编译通过的。
      

  8.   

    补充一下:
    我仅仅声明一个SDO_DIM_ARRAY类型的变量编译都无法通过。
      

  9.   

    在存储过程里面select出来的项必须放在变量里面(动态sql出外)