--建表
SQL> create table test(m_id number);
表已创建--建存储过程
SQL> create or replace procedure
  2   test_pro(my_id number)
  3   as
  4   begin
  5   insert into test(m_id) values(my_id);
  6   end test_pro;
  7  /警告: 创建的过程带有编译错误。--执行后的结果
SQL> exec test_pro(1);
BEGIN test_pro(1); END;      *
第 1 行出现错误:
ORA-06550: 第 1 行, 第 7 列:
PLS-00905: 对象 SCOTT.TEST_PRO 无效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored大家帮我分析下是什么原因啊???

解决方案 »

  1.   

    看看这个结果是什么?
     select * from Dba_Objects t where t.Object_Name = 'TEST'
      

  2.   

    SQL> create table test(m_id number);Table created.SQL> create or replace procedure
      2  test_pro(my_id number)
      3  as
      4  begin
      5  insert into test(m_id) values(my_id);
      6  end test_pro;
      7  /Procedure created.SQL> exec test_pro(1);PL/SQL procedure successfully completed.SQL> select * from test;      M_ID
    ----------
     1
    没什么问题。除非你的scott用户没有创建存储过程的权限。
      

  3.   

    不是SCOTT用户创建的存储过程,没有访问权限
      

  4.   

    DROP TABLE test;CREATE TABLE test(
    m_id NUMBER(18,0)
    );CREATE OR REPLACE PROCEDURE
    test_pro(my_id NUMBER)
    AS
    BEGIN
      INSERT INTO test(m_id) VALUES(my_id);
      COMMIT;
    END test_pro;
    /EXEC test_pro(1);
      

  5.   

    exec test_pro(1);与创建存储过程的用户不是同一个用户
      

  6.   


    SQL> create table test(m_id number) tablespace myts;表已创建。SQL> create or replace procedure test_pro(my_id number)
      2  as
      3  begin
      4  insert into test values(my_id);
      5  end;
      6  /过程已创建。SQL> exec test_pro(1);PL/SQL 过程已成功完成。SQL> select * from test;      M_ID
    ----------
             1--我是用system下登陆进行的 ,你的显示PLS-00905: 对象 SCOTT.TEST_PRO 无效 是因为你当前用户没有权限--在管理员下运行这句语句给SCOTT用户授权。
    grant execute any procedure to SCOTT
      

  7.   

    PLS-00905: 对象 SCOTT.TEST_PRO 无效没有访问对象权限
      

  8.   

    你需要对要访问SCOTT存储过程的用户进行授权:
    GRANR EXECUTE ON SCOTT.TEST TO USER_A;
      

  9.   

    顶一下
         oracle QQ群:54775466
                    欢迎大家来一起探讨。