ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引

时间:2022-06-28 20:34:34

WHEN子句说明触发约束条件。Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数。WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行触发器中,不能用在INSTEAD OF行触发器和其它类型的触发器中。

-- 创建记录操作事件的表

CREATE TABLE event_table(

event VARCHAR2(50),

time DATE

);

-- 创建触发器

CREATE OR REPLACE TRIGGER tr_startup

AFTER STARTUP

ON DATABASE

BEGIN

INSERT INTO event_table(event, time)

VALUES(ora_sysevent, SYSDATE);

END;

  1. 不能对rownum使用>(大于1的数值)、>=(大于1的数值)、=(大于1的数值),否则无结果。

2.在使用rownum时,只有当Order By的字段是主键时,查询结果才会先排序再计算rownum,但是,对非主键字段(如:name)进行排序时,结果可能

就混乱了。出现混乱的原因是:oracle先按物理存储位置(rowid)顺序取出满足rownum条件的记录,即物理位置上的前5条数据,然后在对这些数据按照Order By的字段进行排序,而不是我们所期望的先排序、再取特定记录数。

通常有三种执行不同类型的动态SQL方法:

    1. 使用EXECUTE IMMEDIATE语句。 
      除不能处理多行查询语句,其他的动态SQL包括DDL语句,DCL语句以及单行的SELECT查询都可以。
    2. REF CURSOR动态游标,使用OPEN-FOR,FETCH,CLOSE。 
      能处理动态的多行查询操作,必须要使用OPEN-FOR语句打开游标,使用FETCH语句循环提取数据,最终使用CLOSE语句关闭游标。
    3. 使用批量BULK COLLECT执行动态SQL。 
      通过使用批量动态SQL语句,可以加快SQL语句处理,进而提高PL/SQL的性能。

1. 视图简介

视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。

2. 创建视图

3. 视图的优点

4. 索引

为了提高查询的速度,当用户对查询速度不满意而需要对数据库的性能进行调校时,优先考虑建立索引。