Oracle10g Oracle全局临时表和使用存储过程和函数

Oracle10g Oracle全局临时表和使用存储过程和函数,oracle10g,Oracle10g,我们最近将我开发的一个数据库从Oracle帐户更改为LDAP登录帐户,所有这些都很适合访问系统的工作人员使用的前端。但是,我们有第二种输入方法,仅限于将数据加载到数据库的管理员人员,并且使用dbms_调度程序调用了大量处理 大多数数据库表都有一个created_by列,默认情况下该列从sys_上下文中获取用户名,但当从dbms_调度程序运行数据加载时,该信息不可用,因此created_by列都会填充APP_GLOBAL 我已经设法用sys_上下文值填充了一个全局临时表(GTT),并使用它来填充从

我们最近将我开发的一个数据库从Oracle帐户更改为LDAP登录帐户,所有这些都很适合访问系统的工作人员使用的前端。但是,我们有第二种输入方法,仅限于将数据加载到数据库的管理员人员,并且使用dbms_调度程序调用了大量处理

大多数数据库表都有一个created_by列,默认情况下该列从sys_上下文中获取用户名,但当从dbms_调度程序运行数据加载时,该信息不可用,因此created_by列都会填充APP_GLOBAL

我已经设法用sys_上下文值填充了一个全局临时表(GTT),并使用它来填充从dbms_调度程序调用的存储过程创建的_by,因此我的下一个逻辑步骤是将其放入函数中并调用它,以便它可以在整个系统中使用,甚至可以从插入前触发器引用

问题是,将代码放入函数时,找不到来自GTT的数据。该表设置为保留行


我已经搜索了许多站点以寻求答案,但没有找到任何帮助。这里有人能提供解决方案吗?

调度程序将使用与创建作业的会话不同的会话-
保留行
不会使GTT数据在不同的会话中可见


我假设由创建的
列有一个默认值,如
nvl(sys\u context(…),'APP\u GLOBAL')
。考虑将用户名作为参数输入到作业中,并将上下文设置为作业中的第一步。

< P>周末,仔细查看我的代码,显示出我的语法中的一个致命缺陷,即从GTT中选择数据永远不会发生。快速调整和重新编译,一切都很好


杰克,谢谢你的帮助。

Jack,我已经成功地为dbms_调度程序的同一会话填充了GTT,并且可以从中进行选择。我将代码放入一个函数中,以便调度器中运行的所有存储过程都可以引用该代码,但在引用该函数时,不会返回GTT中的任何数据。您关于创建人的假设几乎是正确的,表达式是列的默认值,不在触发器中。@Colin抱歉-对触发器的引用是typo@Colin调度程序将为其运行的每个作业使用不同的会话