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>
2条答案
按热度按时间lzfw57am1#
触发器是一个偶数的动作。不能使用触发器创建视图。触发器用于基于特定事件执行插入/更新/删除操作,其中as视图用于选择具有多个表组合的列集。
视图用于显示不同表中所需列的组合集,以减少查询工作量。视图主要用于报告目的。您可以在视图上设置触发器,但不能在触发器外设置视图。
qcuzuvrc2#
建议我是否可以在oracle中使用触发器创建db视图?
你能?是的,你可以。你应该吗?不,你不应该。
不管怎样,只是为了好玩,给你:表和它的触发器,它应该在新行插入表后创建一个视图。注意
pragma
; 没有它,它就不会工作,因为你不能在触发器中提交。没错,没有明确的commit
在那里,但是create view
是ddl,它隐式提交。测试: