我建立一个oracle存储过程,在pl/sql中用nc350这个用户以sysdba登陆是可以执行的,但是以normal登陆执行不了,现在用delphi空间 ADOStoredProc执行 和用normal身份登陆一样无法执行。请问是不是权限的问题,怎末解决下
解决方案 »
- 在ADO+DbGridEh中,如何获得插入行的行号?
- 怎么在生成XML文件的时候同时导入图片
- delphi 截取字符串的问题
- 如何获得局域网络中所有的SQL SERVER服务器名。
- WebSerice 服务端得到xml文件往数据库写的问题
- Delphi7的Rave组件怎么用
- 关于用Installshield打包Delphi程序的问题
- 送100分题:如何改变GroupBox内控件的Color属性????
- 这个难道是D6的BUG?
- 数据库的问题,江湖救急!
- 为什么整数表达式的值超过特定整数类型的取值范围时没有引发 ERangeError 异常
- 32位操作系统中写的一个windows服务为什么运行不了?
给执行该存储过程的normal用户赋予权限!
grant read,write on xx to normal
一、用TADODataSet调用
格式是这样的: '{call reg.emp(:param1, :param2.......)} '
用上面的格式写一条带param的命令就可以了
二、用ADOStoredProc或StoredProc调用
ADOStoredProc.ProcedureName:= 'a.b '; //其中a是包名,b是存储过程。
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;
如果是不会执行存储过程的话。
那就参照4楼,5楼的回答。
begin
parameters.parambyname('DM').value:=sDM;
Prepared;
ExecProc;
end;
执行如下代码试试
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;