create procedure insert_teacher(v_id number,v_name varchar2)
 is
 begin
 insert into teacher
 values (v_id,v_name);
 end;
 /提示创建成功
-------------------------------
我调用
SQL> call insert_teacher(2,'d');
call insert_teacher(2,'d')
     *
第 1 行出现错误:
ORA-06575: 程序包或函数 INSERT_TEACHER 处于无效状态
------------------------------------------------------

解决方案 »

  1.   

    -- 两种方法查看原代码:
    select text from user_source where name='MOBILE_STATUS_SUM_DATE3'
    order by line;select dbms_metadata.get_ddl('TABLE','TEST') from dual;-- 若是函数的话,将 TABLE 修改为 FUNCTION ;若是包的话,将 TABLE 修改为 PACKAGE
    -- 然后将查询出来的原代码,重新编译一下,看哪里出误,去修正其原代码!
      

  2.   


    我调用
    SQL> call insert_teacher(2,'d');
    -- 将 call 修改为: execexec insert_teacher(2,'d');-- 这样试试
      

  3.   

    SQL> exec insert_teacher(2,'d');
    BEGIN insert_teacher(2,'d'); END;      *
    第 1 行出现错误:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00905: 对象 SYSTEM.INSERT_TEACHER 无效
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored
      

  4.   

    scott@SZTYORA> create table teacher(
      2  id number(18,0),
      3  name varchar2(20));表已创建。已用时间:  00: 00: 00.00
    scott@SZTYORA>
    scott@SZTYORA> create or replace procedure insert_teacher(v_id number,v_name varchar2)
      2   is
      3   begin
      4   insert into teacher(id,name) -- 此处最好指定字段名,以防原表添加字段后,执行存储过程出错
      5   values (v_id,v_name);
      6   commit; -- INSERT、UPDATE 一般要提交一下
      7   end;
      8   /过程已创建。已用时间:  00: 00: 00.06
    scott@SZTYORA> exec insert_teacher(2,'d');PL/SQL 过程已成功完成。已用时间:  00: 00: 00.00
    scott@SZTYORA> select * from teacher;        ID NAME
    ---------- ----------------------------------------
             2 d已用时间:  00: 00: 00.01
    scott@SZTYORA>
      

  5.   

    drop table teacher;create table teacher(
    id number(18,0),
    name varchar2(20));create or replace procedure insert_teacher(v_id number,v_name varchar2)
     is
     begin
     insert into teacher(id,name) -- 此处最好指定字段名,以防原表添加字段后,执行存储过程出错
     values (v_id,v_name);
     commit; -- INSERT、UPDATE 一般要提交一下
     end;
     /exec insert_teacher(2,'d');