Sql 如何使用触发器创建视图?

Sql 如何使用触发器创建视图?,sql,oracle,oracle11g,database-trigger,database-view,Sql,Oracle,Oracle11g,Database Trigger,Database View,您能建议我是否可以在Oracle中使用触发器创建db视图吗? 例如,我有一个触发器trig_cust,我想创建一个视图: 创建或替换视图vw_cust作为从trig_cust中选择* p.S.需要在循环中使用此视图触发器是一种偶数操作。您不能在触发器之外创建视图。 触发器用于根据特定事件执行操作insert/update/delete,其中as视图用于通过多个表的组合选择一组列 视图用于显示来自不同表的所需列的组合集,以减少查询工作量。视图主要用于报告目的。您可以在视图上设置触发器,但不能在触发

您能建议我是否可以在Oracle中使用触发器创建db视图吗? 例如,我有一个触发器trig_cust,我想创建一个视图: 创建或替换视图vw_cust作为从trig_cust中选择*


p.S.需要在循环中使用此视图

触发器是一种偶数操作。您不能在触发器之外创建视图。 触发器用于根据特定事件执行操作insert/update/delete,其中as视图用于通过多个表的组合选择一组列

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

建议我是否可以在Oracle中使用触发器创建db视图

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

不管怎样,只是为了好玩,我们来看看:表和它的触发器,一旦新行插入到表中,它就应该创建一个视图。注意
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>