0

请您建议我是否可以使用 Oracle 中的触发器创建数据库视图?例如,我有一个触发器 trig_cust,我想创建一个视图: Create or replace view vw_cust as select * from trig_cust;

PS需要循环使用这个视图

4

2 回答 2

1

触发器是一个偶数的动作。您不能在触发器之外创建视图。触发器用于根据特定事件执行插入/更新/删除操作,其中视图用于选择具有多个表组合的列集。

视图用于显示来自不同表的一组所需列的组合,以减少查询工作。视图主要用于报告目的。您可以在视图上有一个触发器,但不能在触发器之外查看。

于 2020-05-18T18:37:08.030 回答
0

建议我是否可以使用 Oracle 中的触发器创建数据库视图?

你能?是的你可以。你应该?不,你不应该。

无论如何,只是为了娱乐,这里你去:表和它的触发器,一旦新行插入到表中,它应该创建一个视图。注意pragma;没有它,它将无法工作,因为您无法在触发器中提交。没错,那里没有明确的commit,但create view它是一个 DDL 并且它隐式提交。

SQL> create table test (empno number, ename varchar2(20));

Table created.

SQL> create or replace trigger trg_ai_test
  2    after insert on test
  3    for each row
  4  declare
  5    pragma autonomous_transaction;
  6  begin
  7    execute immediate 'create or replace view v_test_' || to_char(:new.empno) ||
  8      ' as select * from test where empno = ' || :new.empno;
  9  end;
 10  /

Trigger created.

测试:

SQL> insert into test (empno, ename) values (1, 'Little');

1 row created.

SQL> insert into test (empno, ename) values (2, 'Foot');

1 row created.

SQL> select * from v_test_1;

     EMPNO ENAME
---------- --------------------
         1 Little

SQL> select * from v_test_2;

     EMPNO ENAME
---------- --------------------
         2 Foot

SQL>
于 2020-05-18T19:42:25.810 回答