1.你测试时是如何调用的?
2.表T_KNOWLEDGECATEGORY的三个字段CATEGORYNAME,CATEGORYID,PARENTCATEGORY,确定都是varchar2(2)类型的么?
3.报错时,除了“缺失标识符”,有没有输出ORA-???的错误代码?

解决方案 »

  1.   

    1)测试时是这样写的:exec pro_addKCategory('a','b','cc')
    2)确定
    3弹出“ORA-00931:缺失标识符”的错误提示框,其他的没有。
      

  2.   

    楼主这个地方没有空格吧pro_addKCategory(cName in VARCHAR2,cID in varchar2,pcID in varchar2)AUTHID 这样写吧create or replace procedure pro_addKCategory(cName in VARCHAR2,cID in varchar2,pcID in varchar2) AUTHID current_userAS
    begin
    insert into T_KNOWLEDGECATEGORY(CATEGORYNAME,CATEGORYID,PARENTCATEGORY) values(cName,cID,pcID);
    commit;
    end pro_addKCategory;
      

  3.   

    AUTHID值有两种:
    CURRENT_USER: 过程执行时, 过程代码中的所有对象的所有者默认为当前登录用户
    DEFINER: 无论哪个用户登录执行, 都以定义这个过程的用户执行, 过程代码中的所有对象的所有者均为创建过程的用户
      

  4.   

    先解决编译出错的问题。SQL> alter procedure pro_addKCategory compile;SQL> show errorsSQL> select * from dba_errors
      

  5.   

    show errors 这句话是正确的吗?执行不对呀,我是刚接触ORACEL,不明白
      

  6.   

    那你先把AUTHID current_user这个删除,再执行看一下的呢!一般我写存储过程的时候不会加这个。
      

  7.   

    对啊,这里加不加AUTHID current_user 都没有关系,如果还不成功的话,那也许即使你的软件有问题了
      

  8.   

    看到楼主这么纠结,怀疑是工具的问题,楼主用的是PLSQL Developer吗?
    如果是的话 exec pro_addKCategory('a','b','cc')要到命令窗口执行
    或者在SQL窗口要用
    begin
    pro_addKCategory('a','b','cc');
    end;
      

  9.   

    在sqlplus中执行alter procedure pro_addKCategory compile;
    看有错没?如有错再执行 show errors
    改一个procedure的名字试试
      

  10.   

    是用的PLSQL Developer。按照你说的我试了试确实能执行,用的begin end那个。可是为什么测试,编译却不成功呢
      

  11.   

    执行你说的第一句说:过程已更改,show errors 提示没有错误。看来就按19楼的来就行了。
      

  12.   

    在创建数据库的时候报 ORA-00931