请您建议我是否可以使用 Oracle 中的触发器创建数据库视图?例如,我有一个触发器 trig_cust,我想创建一个视图: Create or replace view vw_cust as select * from trig_cust;
PS需要循环使用这个视图
请您建议我是否可以使用 Oracle 中的触发器创建数据库视图?例如,我有一个触发器 trig_cust,我想创建一个视图: Create or replace view vw_cust as select * from trig_cust;
PS需要循环使用这个视图
触发器是一个偶数的动作。您不能在触发器之外创建视图。触发器用于根据特定事件执行插入/更新/删除操作,其中视图用于选择具有多个表组合的列集。
视图用于显示来自不同表的一组所需列的组合,以减少查询工作。视图主要用于报告目的。您可以在视图上有一个触发器,但不能在触发器之外查看。
建议我是否可以使用 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>