首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SET_CONTEXT和SYS_CONTEXT

使用SET_CONTEXT和SYS_CONTEXT
EN

Stack Overflow用户
提问于 2015-05-29 06:09:11
回答 2查看 486关注 0票数 0

我有一个PL/SQL包(比如package1),它只包含一个过程。此过程用于安全目的,并使用SET_CONTEXT方法存储已登录的应用程序用户。

我还有另一个包(比如package2),其中包含几个与应用程序功能相关的过程,但它们使用SYS_CONTEXT来获取登录用户。

每当我想从Java调用Package2的过程时,我都希望首先执行Package1的过程,然后再执行Package2的过程。原因是我希望这两个调用都发生在同一个数据库连接中。

有没有办法在Oracle中配置它,而不是在每个Package2的过程中重复调用package1的过程。

EN

回答 2

Stack Overflow用户

发布于 2015-05-29 10:14:53

假设您在package1中的过程是公共的(即,在包规范中声明的),并且假设您的package2过程在package1上具有EXECUTE权限,则可能的解决方案之一是使用INITIALIZING PACKAGE

初始化由包声明末尾的BEGIN语句后到end语句的所有语句组成

例如。

代码语言:javascript
复制
PACKAGE BODY package2
IS
   --All your package2 procedures

--initialization section at the end of package2:
BEGIN
   package1.procedure1();
END package2;

只有当您的会话第一次使用package2 (通过使用其中的任何函数/过程)时,才会运行此初始化部分。如果包被重新编译,它将在同一会话中被重新初始化。

票数 0
EN

Stack Overflow用户

发布于 2015-05-29 13:40:25

解决这个问题的另一种方法是将package1 (package1.procedure1();)的代码放入用户登录触发器中,或者从该触发器中调用该过程;请参阅下面的触发器示例

代码语言:javascript
复制
Example: 
CREATE OR REPLACE TRIGGER hr_logon_trigger
  AFTER LOGON
  ON HR.SCHEMA
BEGIN
  -- you code here or call to package1.procedure1();
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30517906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档