oracle 有没有一种方法可以在数据库级别编辑SQL响应/结果

9udxz4iz  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(118)

首先,免责声明:这是用于测试/开发场景,而不是用于生产。
有没有一种方法可以拦截一个选择查询,并为一个特定的字段添加一些值到响应中?
呼叫应用程序是不同的,我希望我们不必改变他们的逻辑。
此外,由于这是我们正在评估的临时方案,我们不希望必须在数据库上运行更新。
我正在考虑触发器,但我看不到任何工作在选择级别。

ru9i0ody

ru9i0ody1#

在Oracle中有几种方法可以静默地更改查询的输出。使用包DBMS_ADVANCED_REWRITE,您可以将值附加到现有值,尽管您必须为要修改的每个语句创建重写等价。例如,下面的查询最初返回名称“Jon”,但在创建重写等价之后,同一查询返回名称“Jon TEST!"。

SYS> create table test1(name varchar2(20));

Table created.

SYS> insert into test1 values('Jon');

1 row created.

SYS> commit;

Commit complete.

SYS> select name from test1;

NAME
--------------------
Jon

1 row selected.

SYS> begin
  2     sys.dbms_advanced_rewrite.declare_rewrite_equivalence
  3     (
  4         name             => 'REWRITE1',
  5         source_stmt      => q'[select name from test1]',
  6         destination_stmt => q'[select name || ' TEST!' name from test1]',
  7         validate         => false,
  8         rewrite_mode     => 'GENERAL'
  9     );
 10  end;
 11  /

PL/SQL procedure successfully completed.

SYS> alter session set query_rewrite_integrity = trusted;

Session altered.

SYS> select name from test1;

NAME
--------------------------
Jon TEST!

1 row selected.

不用说,创建这些重写等价物可能是一种邪恶,可能会让人发疯。你实际上是在告诉Oracle返回错误的值,所以要小心让每个人都知道到底发生了什么。

相关问题