我正面临 PL/SQL 存储过程的问题。我有一个名为 sp1 的 SP,我使用 VS2010 的 ODT 将其部署到我的 oracle 架构中,并且我可以毫无问题地执行。当我尝试从部署之前已存在于架构中的另一个名为 sp2 的存储过程执行 sp1(我在 sp2 的主体中添加对 sp1 的调用并直接从同一架构调用 sp2)时,问题就解决了。这样我得到的只是一个ORA-01031 insufficient privileges
例外。
我google了一下,发现问题是由于声明中缺少该子句AUTHID CURRENT_USER
所致CREATE PROCEDURE
。我使用该子句在另一个包中创建了另一个名为 sp3 的存储过程,并在其中插入了对 sp1 的调用。通过此修改,执行工作。
create or replace procedure sp3(string param)
authid current_user
as
begin
sp1(param);
end;
不幸的是,我不能接受这个解决方案,因为我必须使用已经存在的包(至少有 M 个应用程序使用 sp2 过程并且直接在每个应用程序中添加 sp3 或 sp1 显然是不可能的)。我对 oracle 服务器和客户端都使用版本 11。
有任何想法吗?