Sql 如何使用触发器创建视图?
您能建议我是否可以在Oracle中使用触发器创建db视图吗? 例如,我有一个触发器trig_cust,我想创建一个视图: 创建或替换视图vw_cust作为从trig_cust中选择*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视图用于通过多个表的组合选择一组列 视图用于显示来自不同表的所需列的组合集,以减少查询工作量。视图主要用于报告目的。您可以在视图上设置触发器,但不能在触发
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>