我建立一个oracle存储过程,在pl/sql中用nc350这个用户以sysdba登陆是可以执行的,但是以normal登陆执行不了,现在用delphi空间 ADOStoredProc执行 和用normal身份登陆一样无法执行。请问是不是权限的问题,怎末解决下

解决方案 »

  1.   

      确实是权限问题。
      给执行该存储过程的normal用户赋予权限!
      
      

  2.   

      使用具有sysdba权限的用户登录,然后赋权
      grant read,write on  xx  to  normal
      

  3.   

    是在delphi中还是在存储过程中?
      

  4.   

    总结前人经验: 
    一、用TADODataSet调用 
    格式是这样的: '{call   reg.emp(:param1,   :param2.......)} '   
    用上面的格式写一条带param的命令就可以了 
      
    二、用ADOStoredProc或StoredProc调用 
    ADOStoredProc.ProcedureName:= 'a.b ';   //其中a是包名,b是存储过程。
      

  5.   

    A.利用adoquery调用第三个过程,不返回数据集的procedure tform1.button3click(sender: tobject);
    begin
      adoquery1.close;
      adoquery1.parameters.clear;
      adoquery1.sql.clear;
      adoquery1.sql.add({call pkg_jcctest1.getsubandsum2(?,?)});
      adoquery1.parameters.createparameter(p1,ftstring,pdinput, 50,c11);
      adoquery1.parameters.createparameter(p2,ftstring,pdinput, 50,cn11);
      adoquery1.parameters.createparameter(p3,ftinteger,pdinput, 50,25);
      adoquery1.execsql;
    end;
    B.利用adoquery调用第一个过程,返回数据集的.procedure tform1.button4click(sender: tobject);
    begin
      adoquery1.close;
      adoquery1.parameters.clear;
      adoquery1.sql.clear;
      adoquery1.sql.add({call pkg_jcctest1.getsubandsum2(?,?)});
      adoquery1.parameters.createparameter(p1,ftinteger,pdinput, 50,25);
      adoquery1.parameters.createparameter(p2,ftinteger,pdinput, 50,22);
      adoquery1.open;
      showmessage(string( adoquery1.fieldbyname(sub).value)+-+
      string( adoquery1.fieldbyname(sum).value));
    end;
      

  6.   

    你的问题不是说在normal权限下不能执行吗?用管理员权限赋权给normal权限,那样就可以了。
    如果是不会执行存储过程的话。
    那就参照4楼,5楼的回答。
      

  7.   

    这个应当是Oracle中的存储过程执行权限原因,如2楼grant一下,或让DBA设置
      

  8.   

    你在oracle下都末执行成功,难道指望delphi出个bug可以成功执行?
      

  9.   

     直接执行即可:       with  ADOSProc1   do
        begin
          parameters.parambyname('DM').value:=sDM;      
          Prepared;
          ExecProc;
        end;
      

  10.   

    给normal授权
    执行如下代码试试
    create user normal IDENTIFIED BY DATABASENAME;
    //赋予权限
    GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
       DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
       DBA,CONNECT,RESOURCE,CREATE SESSION TO normal;
      

  11.   

    grant execute on [procedrue_name] to [user] 这是DB的问题,和DELPHI无关.
      

  12.   

    执行的权限对应的是execute就可以了,