在包中使用“alter session set current_schema”引用不同的模式

时间:2012-09-17 14:30:57

标签: asp.net sql oracle10g

可以吗

alter session set current_schema=MySchema;

在包装内?

我们的asp.net Web应用程序调用Oracle包。我们想要与不是MySchema所有者的Oracle用户连接到数据库。为此,我们授予Other_User执行权限以打包MyPackage。

示例:

grant execute on MySchema.MyPackage to Other_User

但是当Web应用程序连接到Oracle并尝试执行MyPackage的存储过程时,它会收到错误,因为表不属于Other_User。

避免错误的一种方法是创建同义词,但我们会优先使用

alter session set current_schema=MySchema;

如果可能的话,在包装内。

编辑:当试图在包中加入“alter session”时: enter image description here

1 个答案:

答案 0 :(得分:4)

您不能在PL / SQL中直接使用DDL语句(ALTER SESSION是)。

您需要使用EXECUTE IMMEDIATE

execute immediate 'alter session set current_schema=MySchema';