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

PLS-00905: 对象 MYCODELIBRARY.FIND_SUBJECT 无效
存储过程为:
CREATE OR REPLACE PROCEDURE --表示创建一个存储过程
  find_subject(vid IN NUMBER)                          --存储过程的名字为:find_subject,有一个输入参数:id
AS
  vname VCARCHAR2(100);                             --变量声明
  vexplan CLOB;
BEGIN
  SELECT s.name,s.explan INTO (vname,vexplan)  FROM subject s WHERE s.id = vid; --存储过程执行的内容:根据ID找到科目的名称并且存入name变量中
  DBMS_OUTPUT.PUT_LINE('科目名称是'||vname);               --在控制台打印输出变量name
EXCEPTION                                                     --异常处理
  WHEN NO_DATA_FOUND THEN
     DBMS_OUTPUT.PUT_LINE('科目编号未找到');    --NO_DATA_FOUND是Oracle的关键字,表示如果没有找到就打印'雇员编号未找到'
END find_subject;

在命令行执行:
SQL> EXECUTE FIND_SUBJECT(1);
 
begin FIND_SUBJECT(1); end;
 
ORA-06550: 第 2 行, 第 7 列: 
PLS-00905: 对象 MYCODELIBRARY.FIND_SUBJECT 无效
ORA-06550: 第 2 行, 第 7 列: 
PL/SQL: Statement ignored

------解决方案--------------------
存储过程编译失败

大概看了下,存储过程的语法有问题
最后的
END find_subject;

应该为
end;


Oracle存储过程基本语法
  1  CREATE OR REPLACE PROCEDURE 存储过程名
  2  IS
  3  BEGIN
  4  NULL;
  5  END;