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

6ju8rftf  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(400)

你能建议我在oracle中使用触发器创建db视图吗?e、 g.我有一个触发器trig\u cust,我想创建一个视图:create或replace view vw\u cust as select*from trig\u cust;
p、 我们需要在循环中使用这个视图

lzfw57am

lzfw57am1#

触发器是一个偶数的动作。不能使用触发器创建视图。触发器用于基于特定事件执行插入/更新/删除操作,其中as视图用于选择具有多个表组合的列集。
视图用于显示不同表中所需列的组合集,以减少查询工作量。视图主要用于报告目的。您可以在视图上设置触发器,但不能在触发器外设置视图。

qcuzuvrc

qcuzuvrc2#

建议我是否可以在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>

相关问题