更改的Oracle SQL查询文本前提交[关闭](Change Oracle SQL Query T

2019-08-01 14:41发布

是否有一个高级Oracle功能来修改SQL查询之前被提交到Oracle? 或者可以修改结果集? 基于一定的条件? 等可以基于该提交查询的进程的名称? 或基于查询的文本?

该方案是一个过程(用C ++编写)正在运行的查询,我们没有办法改变的C ++代码。 这个过程中,具体的业务验证失败并为了使验证没有失败,我想办法来处理返回的数据集或操纵它被提交到Oracle引擎之前选择查询。

在C ++代码运行这个确切查询

SELECT PL_ID FROM A_HDR WHERE ENT_NBR = ''

我想改变它,使得ORACLE总是能看到,而是执行以下查询

SELECT NULL FROM A_HDR WHERE ENT_NBR = ''

请指导

Answer 1:

Oracle虚拟专用数据库可能是你在找什么。 从手册:

Oracle虚拟专用数据库(VPD)允许您创建的安全策略来控制的行和列级的数据库访问。 从本质上讲,Oracle虚拟专用数据库添加WHERE一个Oracle虚拟专用数据库安全策略应用子句是对表,视图或同义词发出一个SQL语句,其动态。

您可以从中获取过程和查询文本SYS_CONTEXT 。 例如, sys_context('userenv', 'current_sql')sys_context('userenv', 'module') 您可能还需要使用GV$SESSION以获取更多信息。

不过,我想你应该尝试尽可能地避免VPD。 这是非常令人困惑的有在后台静默转换所有的SQL语句。 它可以使开发和故障排除非常困难。


更新

在SQL翻译框架中的Oracle 12c的功能很可能是这个问题的最佳解决方案。



文章来源: Change Oracle SQL Query Text before submission [closed]