存储过程为:
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

解决方案 »

  1.   

    发错了,应该为:
    存储过程为:
    CREATE OR REPLACE PROCEDURE --表示创建一个存储过程
      find_subject(vid IN NUMBER)                          --存储过程的名字为:find_subject,有一个输入参数:id
    AS
      vname VARCHAR2(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 
      

  2.   

    存储过程编译失败大概看了下,存储过程的语法有问题
    最后的
    END find_subject;应该为
    end;
    Oracle存储过程基本语法
      1  CREATE OR REPLACE PROCEDURE 存储过程名
      2  IS
      3  BEGIN
      4  NULL;
      5  END;
      

  3.   

    谢谢你的回答了,END后面的参数必须要有,不过我的问题解决了
    分数就给你了。