日期:2014-05-17  浏览次数:20881 次

Oracle创建存储过程,调用出错
create or replace procedure pro_addKCategory(cName in VARCHAR2,cID in varchar2,pcID in varchar2)AUTHID current_user
AS
begin
insert into T_KNOWLEDGECATEGORY(CATEGORYNAME,CATEGORYID,PARENTCATEGORY) values(cName,cID,pcID);
commit;
end pro_addKCategory;
只是一个插入过程。直接F8执行成功,但是测试时出现“缺失标识符”的错误,重新编译时出现“过程,函数或程序包名无效或缺失”的错误。这个存储过程,放在另一个数据库里,知识修改了表名和字段名就没有错,可以调用。查了很多资料,好像是权限的问题,但是改成了和那个通过调用的数据库一个权限了还是不行。

------解决方案--------------------
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html
------解决方案--------------------
1.你测试时是如何调用的?
2.表T_KNOWLEDGECATEGORY的三个字段CATEGORYNAME,CATEGORYID,PARENTCATEGORY,确定都是varchar2(2)类型的么?
3.报错时,除了“缺失标识符”,有没有输出ORA-???的错误代码?
------解决方案--------------------
楼主这个地方没有空格吧

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_user

AS
begin
insert into T_KNOWLEDGECATEGORY(CATEGORYNAME,CATEGORYID,PARENTCATEGORY) values(cName,cID,pcID);
commit;
end pro_addKCategory;



------解决方案--------------------
是否以其它用户登录, 而这个过程的所有者不是登录用户;产生权限问题
------解决方案--------------------
先解决编译出错的问题。

SQL> alter procedure pro_addKCategory compile;

SQL> show errors

SQL> select * from dba_errors
------解决方案--------------------
看到楼主这么纠结,怀疑是工具的问题,楼主用的是PLSQL Developer吗?
如果是的话 exec pro_addKCategory('a','b','cc')要到命令窗口执行
或者在SQL窗口要用
begin
pro_addKCategory('a','b','cc');
end;
------解决方案--------------------
在sqlplus中执行alter procedure pro_addKCategory compile;
看有错没?如有错再执行 show errors
改一个procedure的名字试试