索引 视图 序列
第6章-索引和视图PPT课件
(UNIQUE)的聚集索引。(实际上在物理结构上,与主码约束 相对应是唯一性的聚集索引。) 也可以使用CREATE INDEX语句创建聚集索引。 聚集索引不适用于频繁更改的列和字节长的列。
视图的内容是由SELECT语句的结果集构成。
和真实的表一样,视图也包括几个被定义的数据列和多 个数据行,但从本质上讲,这些数据列和数据行来源于 其所引用的表。
数据库中只存放视图的定义,视图所对应的数据并不实 际地以视图结构存储在数据库中,而是存储在视图所引 用的表中。
当视图引用的基本表中的数据发生变化时,从视图中查 询出的数据也随之改变。
SELECT Student.Sno, Sname, Sdept ,Grade FROM Student , SC WHERE Student.Sno = SC.Sno AND o = 'c05'
-
22
查询视图V_IS_S1
-
23
3.在已有视图上定义新视图
在视图上再建立视图,这时作为数据源的视图必须是已 经建立好的。
列中的数据是唯一的,就可以在同一个表上创 建一个唯一的聚集索引和多个唯一的非聚集索 引。
-
11
示例
例1.为Student表的Sno列创建唯一聚集索引。 CREATE UNIQUE CLUSTERED INDEX Sno_ind ON Student (Sno)
例2.为SC表创建Cno列(升序)Grade(降序) Sno (升序)的非聚集复合索引。 CREATE INDEX CGS_ind ON SC ( Cno, Grade DESC, Sno )
苏科大实验4 管理其他数据库对象
《Oracle 数据库管理》实验报告实验题目实验4 管理索引、视图、同义词和序列院系电子与信息工程学院专业计算机科学与技术(专转本)学生姓名张志虎学生学号 11200135103指导教师崔玉玲成绩日期:2014年5月27日实验4 管理索引、视图、同义词和序列一.实验目的(1) 掌握索引的建立、修改、查看、删除操作。
(2) 掌握视图的建立、查询、修改、删除操作。
(3) 掌握同义词的建立、查询、修改、删除操作,比较对同义词的操作与对原数据库对象的操作是否一致。
(4) 掌握序列的建立、查询、修改、删除操作,利用序列向数据库表中插入数据。
二.实验要求(1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。
(2) 记录利用企业管理器管理索引、视图、同义词和序列的方法。
(3) 记录利用SQL*Plus和iSQL*Plus管理索引、视图、同义词和序列的命令。
三.试验内容1.创建索引(1) 利用企业管理器为医院表的医院名称创建索引,并以降序排列,索引名为索引名称:HOSPITAL_NAME_INDEX表名称:HOSPITAL表名称:降序(DESC)图1-1:企业管理器为医院表建索引(2)利用SQL*Plus或iSQL*Plus为员工表的员工姓名、员工性别、出生年月排序,以员工姓名升序、员工性别降序、出生年月降序排列,索引名为“staff_info_index”。
图1-2:SQL*Plus或iSQL*Plus为员工表建索引2.查看索引引图2-1:企业管理器查看system方案的索引(2)利用SQL*Plus或iSQL*Plus从DBA_INDEXES数据字典中查看员工医疗保险系统所有索引的信息。
SQL> SELECT index_name FROM DBA_INDEXES;图2-2:查询医疗保险系统所有索引信息(3) 利用SQL*Plus或iSQL*Plus从DBA_INDEXES数据字典中查看“staff_info_index”索引的信息。
oracle删除一张表后,索引,同义词,视图,约束会被删除么
oracle删除⼀张表后,索引,同义词,视图,约束会被删除么问题描述:看到有⼀道题,说删除⼀张表之后,什么会被关联删除进⾏测试,看看⼀张表什么会被关联删除,进⾏scoot下的EMP进⾏测试⼀、创建测试需求⽤例表结构:SQL> desc emp;Name Null? Type----------------------------------------- -------- ----------------------------EMPNO NOT NULL NUMBER(4)ENAME VARCHAR2(10)JOB VARCHAR2(9)MGR NUMBER(4)HIREDATE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NUMBER(2)创建视图:CREATE OR REPLACE VIEW V_EMPASSELECT * FROM EMP WHERE ENAME LIKE '%A%'UNION ALLSELECT * FROM EMP WHERE ENAME LIKE '%S%'UNION ALLSELECT * FROM EMP WHERE SAL >= 3000;CREATE OR REPLACE VIEW V_EMPASSELECT * FROM EMP WHERE ENAME LIKE '%A%'UNIONSELECT * FROM EMP WHERE ENAME LIKE '%S%'UNIONSELECT * FROM EMP WHERE SAL >= 3000;创建序列:CREATE SEQUENCE SEQ_BJSXTSTART WITH 20001INCREMENT BY 2MAXVALUE 99999999MINVALUE 1CYCLECACHE 50创建同义词create or replace synonym syn_emp for scott.emp;删除前状态视图查询:SQL> select view_name,view_type from user_views;VIEW_NAME VIEW_TYPE------------------------------ ------------------------------V_EMP索引查询:SQL> select INDEX_NAME,TABLE_NAME,STATUS from user_indexes;INDEX_NAME TABLE_NAME STATUS------------------------------ ------------------------------ --------SYS_IL0000089251C00003$$ TEST VALIDIDX_T_ID T VALIDPK_EMPNO_OGG EMP_OGG VALIDPK_EMP EMP VALIDIDX_EMP_ENAME EMP VALIDPK_DEPTNO_OGG DEPT_OGG VALIDPK_DEPT DEPT VALID7 rows selected.序列查询:SQL> r1* select * from user_sequencesSEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER------------------------------ ---------- ---------- ------------ - - ---------- -----------SEQ_BJSXT 1999999992 Y N 5020101主键查询:主键INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESCEND INDEX_TYPE1 IDX_EMP_ENAME EMP ENAME 11010 ASC NORMAL2 PK_EMP EMP EMPNO 1220 ASC NORMAL外键约束:select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 'EMP';1 SCOTT FK_DEPTNO R EMP <Long> SCOTT PK_DEPT NO ACTION ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 2013/8/2412:04:21同义词查询:SQL> SELECT * FROM USER_SYNONYMS;SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------------------------------------------------------SYN_EMP SCOTT EMPuser_obejcts状态查询:14和17分别是emp表和emp表中的索引object,其余的还能看到序列,视图,同义词的对象select * from user_objects;OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION1 PK_DEPT 8710787107 INDEX 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 42 DEPT 8710687106 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 13 BONUS 8711087110 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 14 SALGRADE 8711187111 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 15 EMP_OGG 8878988789 TABLE 2020/12/2313:14:062020/12/2313:14:302020-12-23:13:14:06 VALID N N N 16 DEPT_OGG 8879088790 TABLE 2020/12/2313:14:072020/12/2313:14:422020-12-23:13:14:07 VALID N N N 17 PK_EMPNO_OGG 8879188791 INDEX 2020/12/2313:14:112020/12/2313:14:112020-12-23:13:14:11 VALID N N N 48 PK_DEPTNO_OGG 8879288792 INDEX 2020/12/2313:14:122020/12/2313:14:122020-12-23:13:14:12 VALID N N N 49 TEST 8925189251 TABLE 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N N N 110 IDX_T_ID 8927489274 INDEX 2021/6/1416:44:432021/6/1416:44:432021-06-14:16:44:43 VALID N N N 411 SYS_IL0000089251C00003$$ 8925389253 INDEX 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N Y N 412 SYS_LOB0000089251C00003$$ 8925289252 LOB 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N Y N 813 T 8927389273 TABLE 2021/6/1416:40:392021/6/1416:44:452021-06-14:16:40:39 VALID N N N 114 EMP 8710887108 TABLE 2013/8/2412:04:212022/1/2316:31:062022-01-23:16:31:06 VALID N N N 115 SEQ_BJSXT 90884 SEQUENCE 2022/1/2316:04:252022/1/2316:04:252022-01-23:16:04:25 VALID N N N 116 SYN_EMP 90891 SYNONYM 2022/1/2316:27:282022/1/2316:27:282022-01-23:16:27:28 INVALID N N N 117 BIN$1jx+fvk2Dy3gUwajqMCaPA==$19088590885 INDEX 2022/1/2316:04:382022/1/2316:27:532022-01-23:16:27:53 VALID N N N 418 V_EMP 90883 VIEW 2022/1/2316:03:582022/1/2316:03:582022-01-23:16:03:58 INVALID N N N 119 BIN$1jx+fvk3Dy3gUwajqMCaPA==$187******** INDEX 2013/8/2412:04:212022/1/2316:27:532022-01-23:16:27:53 VALID N N N 420 PRO_SUPPLEMENT_LEAVE_MAPPING 90886 PROCEDURE 2022/1/2316:10:402022/1/2316:10:402022-01-23:16:10:40 INVALID N N N 1回收站:SQL> show recyclebinSQL>⼆、删除表SQL> drop table emp;Table dropped.索引状态:INDEX_NAME TABLE_NAME STATUS1 SYS_IL0000089251C00003$$ TEST VALID2 IDX_T_ID T VALID3 PK_EMPNO_OGG EMP_OGG VALID4 PK_DEPTNO_OGG DEPT_OGG VALID5 PK_DEPT DEPT VALID视图状态:SQL> select view_name,view_type from user_views;VIEW_NAME VIEW_TYPE------------------------------ ------------------------------V_EMP序列状态:SQL> select * from user_sequences;SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER------------------------------ ---------- ---------- ------------ - - ---------- -----------SEQ_BJSXT 1999999992 Y N 5020101同义词状态:SQL> SELECT * FROM USER_SYNONYMS;SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------------------------------------------------------SYN_EMP SCOTT EMPuser_objects状态查询:可以看到⽤户表以及索引就已经被删除了select * from user_objects;OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NA1 PK_DEPT 8710787107 INDEX 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 42 DEPT 8710687106 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 13 BONUS 8711087110 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 14 SALGRADE 8711187111 TABLE 2013/8/2412:04:212013/8/2412:04:212013-08-24:12:04:21 VALID N N N 15 EMP_OGG 8878988789 TABLE 2020/12/2313:14:062020/12/2313:14:302020-12-23:13:14:06 VALID N N N 16 DEPT_OGG 8879088790 TABLE 2020/12/2313:14:072020/12/2313:14:422020-12-23:13:14:07 VALID N N N 17 PK_EMPNO_OGG 8879188791 INDEX 2020/12/2313:14:112020/12/2313:14:112020-12-23:13:14:11 VALID N N N 48 PK_DEPTNO_OGG 8879288792 INDEX 2020/12/2313:14:122020/12/2313:14:122020-12-23:13:14:12 VALID N N N 49 TEST 8925189251 TABLE 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N N N 110 IDX_T_ID 8927489274 INDEX 2021/6/1416:44:432021/6/1416:44:432021-06-14:16:44:43 VALID N N N 411 SYS_IL0000089251C00003$$ 8925389253 INDEX 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N Y N 412 SYS_LOB0000089251C00003$$ 8925289252 LOB 2021/6/1316:12:422021/6/1316:12:422021-06-13:16:12:42 VALID N Y N 813 T 8927389273 TABLE 2021/6/1416:40:392021/6/1416:44:452021-06-14:16:40:39 VALID N N N 114 SEQ_BJSXT 90884 SEQUENCE 2022/1/2316:04:252022/1/2316:04:252022-01-23:16:04:25 VALID N N N 115 SYN_EMP 90891 SYNONYM 2022/1/2316:27:282022/1/2316:27:282022-01-23:16:27:28 INVALID N N N 116 V_EMP 90883 VIEW 2022/1/2316:03:582022/1/2316:03:582022-01-23:16:03:58 INVALID N N N 117 PRO_SUPPLEMENT_LEAVE_MAPPING 90886 PROCEDURE 2022/1/2316:10:402022/1/2316:10:402022-01-23:16:10:40 INVALID N N N 1结合测试得出结论1.删除⼀张表,肯定会删除⼀张表中的数据和这个对象2.删除表后,同义词,视图,序列不会被删除3.删除表后,索引会被删除,不会失效。
视图知识点重点总结归纳
视图知识点重点总结归纳一、什么是视图?视图是一个虚拟表,是基于 SQL 查询结果集的表。
它包含了一系列的列和行,这些列和行实际上是来自于一个或多个实际的基本表,但是它并不在数据库中以存储数据的形式存在。
视图可以包含不同表的列,因此实际上是对实际表的抽象。
视图可以简化复杂查询,更容易使用,增加了数据安全性,同时也提高了数据的可用性。
视图不包含数据,而是通过与视图相关的查询来返回数据。
二、视图的创建1. 创建视图的语法创建视图的语法如下:```CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;```2. 创建视图的示例假设有两个表:员工表和部门表,我们可以创建一个视图,来显示员工的姓名和部门名称:```CREATE VIEW employee_department ASSELECT , FROM employeeJOIN department ON employee.department_id = department.id;```三、视图的优点1. 数据安全性通过视图,可以隐藏底层表的数据。
比如,我们可以对敏感数据进行限制,只提供需要的部分给用户或应用程序。
2. 简化复杂查询视图可以将多个表连接,并以更简单的方式呈现数据,使得复杂查询更易于管理和维护。
3. 提高数据可用性通过视图,我们可以将常用的查询结果保存为视图,这样可以避免重复查询,提高数据的可用性和查询效率。
4. 灵活性视图可以根据需要创建或修改,并且不会影响底层表结构。
5. 逻辑数据独立性可以使用视图来隐藏底层表的结构变化,从而提供逻辑数据独立性,使应用程序与底层表的结构变化无关。
六、视图的缺点1. 性能开销创建视图会增加系统的性能开销,尤其是当视图引用了多个基本表,或者视图本身包含了复杂的逻辑操作时。
2. 数据更新限制由于视图是对底层表的抽象,因此不是所有的视图都可以进行数据更新操作。
视图与索引
视图与索引1.视图视图(View)作为一种数据库对象,为用户提供了一个可以检索数据表中的数据方式。
用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然在表中。
视图是一个虚拟表,并不代表任何物理数据,只是用来查看数据的窗口而已。
视图并不是以一组数据的形式存储在数据库中,数据库中只存储视图的定义,而不存储视图对应的数据,这些数据仍存储在导出视图的基本表中。
当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。
视图中的数据行和列都是来自于基本表,是在视图被引用时动态生成的。
使用视图可以集中、简化和制定用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访问该视图的基本表。
视图由视图名和视图定义两个部分组成。
视图是从一个或多个表导出来的表,它实际上是一个查询结果,视图的名字和视图对应的查询存储在数据字典中。
视图的优点1.数据安全性。
对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。
数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。
通过视图,用户可以被限制在数据的不同子集上。
2.查询简单化。
为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。
那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。
3.逻辑数据独立性。
视图可以使应用程序和数据库表在一定程度上独立。
如果没有视图,应用一定是建立在表上的。
有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
对于视图的操作,例如,查询只依赖于视图的定义,当构成视图的基本表需要修改时,只需要修改视图定义中的子查询部分,而基于视图的查询不用改变。
视图的缺点1.性能。
SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
oracle数据库ddl语句
oracle数据库ddl语句Oracle数据库DDL语句是用于定义、修改和删除数据库对象的语句。
DDL 是数据定义语言(Data Definition Language)的缩写,它包括了一系列的命令,如CREATE、ALTER和DROP等,用于管理数据库的结构和元数据。
在本文中,我们将逐步回答关于Oracle数据库DDL语句的一系列问题。
什么是Oracle数据库DDL语句?Oracle数据库DDL语句指的是用于管理数据库结构和元数据的命令。
这些命令允许我们创建、修改和删除数据库对象,如表、视图、索引、序列和约束等。
DDL语句允许数据库管理员对数据库进行结构上的修改,以适应业务需求的变化。
有哪些常用的Oracle数据库DDL语句?Oracle数据库提供了一套完整的DDL语句,以下是一些常用的DDL语句:1. CREATE TABLE语句:用于创建一个新的数据库表。
可以定义表的列以及各个列的数据类型和约束。
2. ALTER TABLE语句:用于修改已存在的数据库表的结构。
可以添加或删除列,修改列的数据类型,以及添加或删除约束等。
3. DROP TABLE语句:用于删除一个数据库表及其数据。
这将会删除表的结构以及与该表关联的索引、触发器等。
4. CREATE INDEX语句:用于创建一个新的索引。
索引可以加速对数据库表的查询操作。
5. ALTER INDEX语句:用于修改已存在的索引的结构。
可以修改索引的名称、添加或删除索引的列等。
6. DROP INDEX语句:用于删除一个索引。
7. CREATE VIEW语句:用于创建一个新的视图。
视图是一个虚拟表,它包含基础表中的数据,但不实际存储数据。
8. ALTER VIEW语句:用于修改已存在的视图的结构。
9. DROP VIEW语句:用于删除一个视图。
10. CREATE SEQUENCE语句:用于创建一个新的序列。
序列是一种自动递增的数字。
11. ALTER SEQUENCE语句:用于修改已存在的序列的属性。
数据库对象视图序列、索引、同义词
通过本节学习,你需要掌握:
视图(view) 序列(sequence) 索引(index) 同义词(synonym)
最后修改时间:2011.4象
数据库对象 描述
Table
基本的存储单元,包括数据行和字段
View
2020/4/14
11
.
从视图中查询数据(2)
SQL*PLUS
SELECT * FROM empvu10;
7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK
USER_VIEWS
EMPVU10 SELECT empno, ename, job FROM emp WHERE deptno = 10;
----
EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
2020/4/14
8
.
创建视图(3)
创建视图的查询语句中可以使用复杂的 SELECT语句,包括连接(join)、分组 (groups)、子查询(subqueries)、排序 (order by)
2020/4/14
5
.
简单视图和复杂视图
特点 涉及的表格数量 包含函数? 包含组数据? 允许DML操作?
简单视图 1 否 否 是
复杂视图 ≥1 是 是 不一定
2020/4/14
6
.
创建视图(1)
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view [(alias [, alias …] )]
索引和视图 PPT课件
索引的分类
SQL Server 中的索引分为3类,分别是: 聚集索引 非聚集索引 唯一索引
聚集索引
聚集索引会对表和视图进行物理排序,所以这种索 引对查询非常有效,在表和视图中只能有一个聚集索引。 当建立主键约束时,如果表中没有聚集索引,SQL Server 会用主键列作为聚集索引键。也可以手动 在表的任何列或列的组合上建立索引,但在实际应用 中,一般为定义成主键约束的列建立聚集索引。
③关键字的大小写不影响结 果
④只有表的所有者才能执行 CREATE INDEX语句 ⑤更多请参考本书第页
3、管理索引
管理索引的操作包括: 显示索引信息 重命名索引 删除索引 其他
显示索引 在索引创建完成后,可以查看索引的相关信息,包 括查看索引的名称、类型、索引键列等。查看索引信息 有两种方法:一种是用“对象资源管理器”进行显示; 另
使用T-SQL语句显示索引 使用T-SQL语句显示相关索引信息,实际是调用 了系统自定义的存储过程sp_helpindex(存储过程的 相关知识请参看本书第9章的内容)。
【例7.2】使用T-SQL语句显示CJGL数据库中Student表 的索引信息。 在查询窗口中使用的T-SQL语句如下: USE CJGL GO EXEC sp_helpindex Student GO
CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX index_name ON <object> (column[ASC|DESC][,...n]) [INCLUDE(column_name[,...n])] [WITH(<relational_index_option>[,..#39;table.old_index','new_index'
Oracle数据库——索引、视图、序列和同义词的创建
Oracle数据库——索引、视图、序列和同义词的创建⼀、涉及内容 1.理解索引的概念和类型。
2.掌握创建索引的命令。
3.理解视图的概念和优点。
4.理解可更新视图应具备的特点。
5.掌握创建⼀般视图和可更新视图的命令。
6.理解序列和同义词的概念和作⽤。
7.掌握序列的创建与应⽤。
8.掌握同义词的创建与应⽤。
⼆、具体操作(实验)1.在数据库中创建Student表,包括学号Id、姓名Name、性别Sex、班级编号Class_id。
利⽤该表创建如下索引:(1)在Id字段上创建唯⼀的B树索引。
(2)在Name字段上创建普通的B树索引。
(3)在Sex 字段上创建位图索引。
语句:--建表:create table Student(Id char(6),Name varchar2(8),Sex char(2),Class_id char(4));create unique index index_id on Student(Id);create index index_name on Student(Name);create bitmap index index_sex on Student(Sex);截图:2.利⽤scott.emp 表创建视图并完成以下操作:(1)创建简单视图。
语句:conn scott/tiger;grant insert,update,delete on emp to system;conn system/orcl1234;create or replace VIEW v_empasselect empno,ename,job,hiredate,deptnofrom scott.emp;截图:(2)查看视图的结构。
语句:SQL> desc v_emp;截图:(3)从视图中查询数据。
语句:SQL> select * from v_emp where deptno=10;截图:(4)查看视图中各字段的可更新性。
Oracle 数据库对象_序列_索引_视图_同义词
查看序列情况
SELECT s_test.currval FROM dual; SELECT s_test.nextval FROM dual;
删除序列
删除序列使用DROP SEQUENCE语句
例如,删除s_test3序列
DROP SEQUENCE s_test3;
执行效果如下图所示:
索引介绍
使用序列填充主键-2
查询插入结果
SELECT * FROM order_status2;
查询结果如图所示
注意
Hale Waihona Puke 当使用序列填充主键列时,通常应使用NOCACHE避免序列产生的数 值发生遗漏(数值产生遗漏是因为缓存数值时,数据库被关闭)。然 而,使用NOCACHE虽然会降低性能。但是如果不介意主键值产生遗 漏,可以再考虑使用CACHE。
案例
使用默认选项创建序列
CREATE SEQUENCE s_test;
说明
创建序列忽略了其他选项,那么将会使用默认值。 start_num和increment_num都是1
指定相关选项创建序列
CREATE SEQUENCE s_test2 START WITH 10 INCREMENT BY 5 MINVALUE 10 MAXVALUE 20 CYCLE CACHE 2 ORDER;
说明
minimum_num:序列中的最小值,该值必须比start_num小,比 maximum_num也要小 NOMINVALUE:对于序列最小值,不指定最小值,对于升序最小值是1 ,对于降序最小值是-1026 CYCLE:对于序列的值达到最大值或最小值时的处理方法。如果是升序 达到最大值了,那么下一个生成的值将是最小值;如果是降序达到最小值 时,那么下一个值将是最大值。 NOCYCLE:当序列的值达到最大或最小值时,序列将不再产生任何数值 。默认是NOCYCLE。
Oracle序列、视图、索引、同义词管理
5) CYCLE和NOCYCLE 表示 表示当序列生成器的值达到限制值后是 否循环。如果不循环,达到限制值后,继续产生新值就会发生错 误。 6) CACHE(缓冲)定义存放序列的内存块的大小,默认为20。 NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可 以改善序列的性能。这种情况也能会在数据库关闭时也会导致序 号不连续。 7) ORDER确保按照请求次序生成整数。NOORDER为默认值,在 RAC环境下一般使用ORDER选项。
SYS_GUID()函数
使用场景: 这在对象在不同机器的不同数据库里 生成以及需要在后来合并到一起的情况下很有用, 因为这样可以防止主键冲突。因为采用sequence 的话,只能保证在同一个数据中该序列号唯一, 但是在不同的数据库实例中有可能冲突。 使用弊端:由于sys_guid ()生成的序列号过长,这 会消耗数据库存储空间,且管理不方便。基于此, 在非并行环境下的数据库应用中,应尽量避免使 用sys_guid ()。
SYS_GUID()函数
SYS_GUID returns a GUID-- a globally unique ID. A SYS_GUID is a RAW(16). It does not generate an incrementing numeric value. If you really want to use SYS_GUID CREATE TABLE table_name ( primary_key_column raw(16) default sys_guid() primary key, <<other columns>> ) 方法作用:系统根据当前时间和机器码,生成全球唯一的 一个序列号。 方法举例: select sys_guid() from dual; ---------------------------------------------------------------6E3DC539CF7944E7BC4650D0EEF06865
Oracle数据库基本操作(二)——视图、序列、索引、同义词
Oracle数据库基本操作(⼆)——视图、序列、索引、同义词⼀、视图(Views)与同义词 1、视图:实际上是对查询结果集的封装,视图本⾝不存储任何数据,所有的数据都存放在原来的表中; 在逻辑上可以把视图看作是⼀张表 2、作⽤:封装查询语句,简化复杂的查询需求屏蔽表中的细节 3、语法:create[or replace]view视图的名称as查询语句[with read only] 4、视图和同义词:屏蔽了查询过程步骤屏蔽了真实的表名增加了代码被破解的难度 5、⽰例:select*from emp;-- 封装成⼀个视图: 获取10号部门的员⼯信息create or replace view view_test1 as select*from emp where deptno=10;select*from view_test1;-- 简化查询语句CREATE VIEW view_test2 AS SELECTSUM(cc) total,SUM(CASE yy WHEN'1980'THEN cc END) "1980",SUM(CASE yy WHEN'1981'THEN cc END) "1981",SUM(CASE yy WHEN'1982'THEN cc END) "1982",SUM(CASE yy WHEN'1987'THEN cc END) "1987"FROM(SELECTTO_CHAR(HIREDATE, 'YYYY') YY,COUNT(*) CCFROMEMPGROUP BYTO_CHAR(HIREDATE, 'YYYY')) TT ;select*from view_test2;-- 屏蔽表中的细节create or replace view view_test3 as select ename,job,mgr,hiredate from emp;-- 通过视图修改数据update view_test3 set ename='SMITH'where ename='SMI%TH';-- 创建只读视图create view view_test4 as select ename,job,mgr,hiredate from emp with read only;-- 报错 ORA-01733: virtual column not allowed hereupdate view_test4 set ename='SMITH2'where ename='SMITH';-- 同义词: 相当于是取了⼀个别名create synonym yuangong for view_test3;select*from yuangong;⼆、序列 序列: 1,2,3,4,5,6,7.... 作⽤: 模拟类似mysql中auto_increment⾃动增长的编号 1、语法:create sequence 序列名称start with从⼏开始increment by每次递增多少minvalue | nominvaluemaxvalue | nomaxvaluecycle | nocyclecache 缓存⼏个数31,2,34,5,6-- currval:序列当前取到哪个值,必须是调⽤了⼀次nextval之后才能正常使⽤-- nextval:序列中的下⼀个值-- 注意:序列中的值,⼀旦被取过,⽆论回滚/发⽣异常,序列都是永不回头向下递增的 2、使⽤⽰例-- 1,2,3,4,5,6,1,2,3,4,5,6create sequence seq_test01start with1minvalue 1maxvalue 6cyclecache 3;-- 需先执⾏nextval语句后才有效select seq_test01.currval from dual;select seq_test01.nextval from dual;-- 开发过程,通常写法如下:create sequence seq_test02;-- 建表create table louceng(lou number primary key);-- 执⾏两次insert into louceng values(seq_test02.nextval);-- 1 2select seq_test02.currval from dual;select*from louceng;三、索引3.1 索引概述 索引:索引是⼀种已经排好序的帮助数据库快速查找数据的数据结构,主要是⽤来帮助数据库快速的找到数据相当于⼀本书的⽬录。
Unit5: 视图、序列、索引 、 约束
1.视图1.1 什么是视图视图view也被称为虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应一条select语句,结果集被赋予一个名字,即视图名字。
视图本身不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
创建视图语法:create [or replace] view 视图名[(alias[,alias...])]as subquery;说明:语法中的subquery是select查询语句,对应的表被称为基表。
根据视图对应的子查询种类分为几种类型:1)select语句是基于单表建立的,且不包含任何函数运算、表达式或分组函数,叫做简单视图,此时视图是基表的子集;2)select语句同样是基于单表,但包含了单行函数、表达式、分组函数或group by 子句,叫做复杂视图;3)select语句是基于多个表的,叫做连接视图。
1.2 视图的作用1)简化复杂查询;2)视图本质上就是一条select语句,所以当访问视图时,只能访问到所对应的select语句中涉及到的列,对基表中的其他列祈祷安全和保密的作用,可以限制数据访问。
1.3 视图创建授权grant create view to 用户名;1.4 创建简单视图CREATEVIEW v_emp_10ASSELECT empno, ename, sal, deptnoFROM empWHERE deptno =10;查看视图结构:desc v_emp_10查询视图:select * from v_emp_10;select id,name,salary from v_emp_10;1.5 对视图进行insert操作当对视图进行DML操作时,实际上是对基表的DML操作。
对视图执行DML操作的基本原则:1)简单视图能够执行DML操作,下列情况除外:在基表中定义了非空列,但简单视图对应的select语句并没有包含非空列,导致这个非空列对视图不可见,这时无法对视图执行insert操作;2)如果视图定义中包含了函数、表达式、分组语句,distinct关键字或rownum伪列,不允许执行DML操作;3)DML操作不能违反基表的约束条件。
多维数组 索引 规律
多维数组的索引规律通常取决于数组的维度和数据类型。
下面是一些常见的情况:
1. 一维数组:在索引一维数组时,通常从0开始,逐个递增。
例如,对于一个包含n个元素的数组,索引从0到n-1。
2. 二维数组:在索引二维数组时,通常从(i, j)开始,其中i 和j是行和列的索引。
对于一个m x n的二维数组,索引范围是从0到m x n-1。
例如,对于一个3x4的二维数组,索引范围是(0, 0), (0, 1), ..., (2, 3)。
3. 三维及以上数组:对于更高维度的数组,索引规律可能会更加复杂。
通常,每一层的索引都会影响到下一层的索引。
例如,对于一个三维数组,你可能需要指定一个特定的行、列和层来获取元素。
具体的索引规则可能会因库或框架的不同而有所差异。
需要注意的是,多维数组的索引通常是从左到右、从上到下、从内到外进行遍历的。
在某些情况下,也可能存在跳跃或跳跃性索引,这取决于具体的实现和数据结构。
另外,对于多维数组的访问,通常可以使用循环或迭代器来遍历所有维度并获取元素。
具体的实现方式可能会因编程语言、库或框架的不同而有所差异。
索引排序的内部流程
索引排序的内部流程
首先,索引排序涉及到索引结构的选择。
常见的索引结构包括B树、B+树、哈希索引等。
不同的索引结构在排序过程中会有不同的内部流程。
以B+树为例,其内部流程包括分裂、合并、平衡等操作,这些操作都会对索引的排序产生影响。
其次,索引排序还涉及到排序算法的选择。
常见的排序算法包括快速排序、归并排序、堆排序等。
在索引排序中,选择合适的排序算法可以有效地提高排序的效率和性能。
此外,索引排序还需要考虑到优化策略。
例如,可以通过批量排序、并行排序等方式来优化索引排序的性能。
另外,还可以考虑数据的分区、分片等策略来加速索引排序的过程。
总的来说,索引排序的内部流程涉及到索引结构、排序算法和优化策略等多个方面。
在实际应用中,需要根据具体的场景和需求来选择合适的索引结构、排序算法和优化策略,以达到最佳的排序效果。
黑马程序员c语言教程:视图 序列 索引概念
视图序列索引1 视图的概念--创建视图是一个逻辑概念,本身没有数据,还是来源于表--视图的优点简化查询2 创建视图create view empincomeviewasselect e.empno, e.ename, e.sal, e.sal*12 annalsal, sal*12+nvl(comm, 0) income, d.dnamefrom emp e, dept dwhere e.deptno = d.deptno;--查询员工编号名称工资年薪年收入部门名称信息*第 1 行出现错误:ORA-01031: 权限不足 -- 需要有create view权限用户管理中权限管理需要管理员登录进行授权C:\>sqlplus /as sysdbaSQL> grant create view to scott; 创建视图的权限给scott用户3 操作视图SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------DEPT TABLETEST2 TABLESTUDENT TABLEEMPINCOME TABLEEMPINCOMEVIEW VIEWselect * from empincomeview;--视图的优点简化复杂查询 (封装复杂sql语言)限制数据访问银行系统视图呈现,而且只读视图, 通过存储过程和存储函数来做通过视图修改表中的数据,不建议,有很多限制提供数据的相互独立同样的数据,可以有不同的显示方式但视图不能提高性能4 视图的几个注意点-- 视图 with check optioncreate view view1asselect * from emp where deptno=10with check option;insert into view1 values(***,***,...., 10);insert into view1 values(***,***,...., 20);--通过视图只能看到10号部门的员工信息,不能插入20号部门员工-- 视图with read only;create or replace view empincomeview2asselect e.empno, e.ename, e.sal, e.sal*12 annalsal,sal*12+nvl(comm, 0) income, d.dnamefrom emp e, dept dwhere e.deptno = d.deptnowith read only;--修改视图视图只能替换,不能修改-- 区分复杂视图和简单视图没有太多实际意义,关键是求解问题-- 视图操作的限制结论:一般不通过视图做insert/update/delete操作视图的目的:就是简化查询的....================================================================== 1 --创建序列create sequence myseq;2 序列基本概念放在内存中速度快auto_increment[ 1 , 2, 3, 4......20 ]▲tableA3 序列的应用-- 创建表create table tableA(tid number,tname varchar2(40));-- 从序列中取nextval,产生tableA的主键值insert into tableA values(myseq1.nextval, 'aa');序列的两个属性 NEXTVAL CURRVAL nextval应在currval之前被指定select myseq.currval from dual;SQL> select myseq.currval from dual;select myseq.currval from dual*第 1 行出现错误:ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义select myseq.nextval from dualselect myseq.currval from dual4 删除序列-- drop sequence myseq;5 序列需要注意的问题多个表共用一个序列,造成序列不连续回滚会造成,造成序列不连续系统异常,内存序列丢失,造成序列不连续==================有关索引小专题0 索引原始知识索引和表是单独存放索引对dba和开发人员,使用起来是透明的,只要创建索引1 索引基本原理图示 10号 20号部门表记录索引表算法--------▲▲b+树--------★▲--------▲▲--------`(*∩_∩*)′▲--------▲★--------★★--------▲`(*∩_∩*)′--------`(*∩_∩*)′`(*∩_∩*)′2 建立索引create index myindex on emp(deptno);create index myindex2 on emp(deptno, job);3 索引说明主键本身就是索引唯一约束也是自动索引=======================================================同义词create synonym em for emp;管理给scott用户查询权限ALTER USER "HR" ACCOUNT UNLOCKGRANT SELECT ON "HR"."EMPLOYEES" TO "SCOTT"select * from hr.employees;SQL> select count(*) from hr.employees;为hr.employees创建一个别名create synonym hremp for hr.employees;*第 1 行出现错误:ORA-01031: 权限不足---dba管理员分配权限grant create synonym to scott; GRANT CREATE ANY SYNONYM TO "SCOTT"select count(*) from hremp;图像界面熟悉 PK 命令行工具。
03 oracle 索引、序列、查询(分组、排序、连接)、视图等
比较操作符
比较操作符用于比较两个表达式的值 比较操作符包括 =、!=、<、>、<=、>=、 BETWEEN…AND、IN、LIKE 和 IS NULL等
SQL> SELECT itemdesc, re_level FROM itemfile WHERE qty_hand < max_level/2; SQL> SELECT orderno FROM order_master WHERE del_date IN (‘06-1月-05’,‘05-2月-05'); SQL> SELECT vencode,venname,tel_no FROM vendor_master WHERE venname LIKE 'j___s';
SELECT中的条件语句
FROM 条件子句
- SELECT fieldlist FROM 表名
WHERE 条件子句
- SELECT fieldlist FROM 表名 WHERE 条件
DISTINCT属性词用法
- SELECT [*|DISTINCT] FROM table
SELECT中的条件语句
问题
成绩表中存储了所有学员的成绩,我想知道: 学员的总成绩、平均成绩、有成绩的学员总共有多少名 怎么办?
聚合函数-1
SUM SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'
SELECT SUM(ytd_sales) ,Price FROM titles WHERE type = 'business' AVG SELECT AVG(SCore) AS 平均成绩 From Score WHERE Score >=60
实验13 视图、索引和序列的管理
实验十三视图、索引和序列的管理一、目的与要求1.掌握视图的管理方法;2.掌握索引的管理方法;3.掌握序列的管理和使用方法;二、实验准备1.视图是一个虚拟的表,它在物理上并不存在。
视图可以把表或其他视图的数据按照一定的条件组合起来,所以也可以把它看成是一个存储的查询。
视图并不包含数据,它只是从基表中读取数据。
2.了解使用SQL语句管理视图的方法。
3.了解使用SQL语句管理索引的方法。
4.了解使用SQL语句管理序列的方法。
三、实验内容CREATE TABLE 图书(图书号V ARCHAR2(20) PRIMARY KEY ,书名V ARCHAR2(50) NULL ,作者V ARCHAR2(30) NULL ,出版社V ARCHAR2(30) NULL ,单价NUMBER NULL);CREATE TABLE 读者(读者号V ARCHAR2 (10) PRIMARY KEY,姓名V ARCHAR2 (8) NOT NULL ,性别V ARCHAR2 (2) NOT NULL ,办公电话V ARCHAR2 (8),部门V ARCHAR(30));CREATE TABLE 借阅(读者号V ARCHAR2 (10) NOT NULL ,图书号V ARCHAR2 (20) NOT NULL ,借出日期DATE NOT NULL ,归还日期DATE,PRIMARY KEY (读者号, 图书号),FOREIGN KEY (读者号) REFERENCES 读者(读者号),FOREIGN KEY (图书号) REFERENCES 图书(图书号));INSERT INTO 图书V ALUES ('TN913.2/530','21世纪的电信网','盛友招','人民邮电出版社',7.5);INSERT INTO 图书V ALUES ('TP311.13/CM3','数据库系统原理及应用','苗雪兰','机械工业出版社',28);INSERT INTO 图书V ALUES ('TP311.132/ZG1','XML数据库设计','尹志军','机械工业出版社INSERT INTO 图书V ALUES ('TP316/ZW6','操作系统','吴庆菊','科学出版社',35);INSERT INTO 图书V ALUES ('TP316/ZY1','操作系统','沈雪明','电子工业出版社',31); INSERT INTO 图书V ALUES ('TP391.132.3/ZG5','网络数据库技术精粹','李智等','机械工业出版社',45);INSERT INTO 读者V ALUES ('001973','王平','男','88320701','');INSERT INTO 读者V ALUES ('001974','张丽','女','88320701','');INSERT INTO 读者V ALUES ('001975','王辉','男','88320701','');INSERT INTO 读者V ALUES ('001976','李建','男','88320701','');INSERT INTO 读者V ALUES ('001977','程淡','女','88320701','');INSERT INTO 借阅V ALUES('001973','TP311.132/ZG1',to_date('2005-01-27','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM-DD'));INSERT INTO 借阅V ALUES('001973','TP316/ZW6',to_date('2005-01-27','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM -DD'));INSERT INTO 借阅V ALUES('001975','TP311.132/ZG1',to_date('2005-01-27','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM-DD'));INSERT INTO 借阅V ALUES('001974','TP311.13/CM3',to_date('2005-01-27','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM-DD'));INSERT INTO 借阅V ALUES('001975','TP316/ZW6',to_date('2005-01-27','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM -DD'));INSERT INTO 借阅V ALUES('001974','TP311.132/ZG1',to_date('2005-01-28','YYYY-MM-DD'),to_date('2005-03-28','YYYY-MM-DD'));针对实验九中所创建的数据库LIB,完成以下实验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储过程
调用存储过程
存储过程创建好并没有被执行,只是被编译,调用才能
执行,两种方式 CALL procedure_name([parameter[,…..]]) 或者 EXEC[UTE] procedure_name([parameter[,…..]])
存储过程
存储过程
例:编写存储过程:使用游标和loop循环来显示所有部门的名称。
函数
函数用于返回特定数据。 创建函数:语法 CREATE [OR REPLACE] FUNCTION function_name [(parameter [IN|OUT|IN OUT] data_type)[,…..]] RETURN data_type {IS|AS} [declaration_section;] BEGIN function_body; END [function_name];
后,在缓存中的序列值将全部丢失,可以通过数据字典
USER_SEQUENCES获取序列的信息。
序列
修改序列:
序列
使用序列:
语法:ALTER TRIGGER trigger_name ENABLE|DISABLE; 修改某个表上的所有的触发器的状态. 语法:ALTER TABLE table_name ENABLE|DISABLE ALL TRIGGERS;
查看和修改触发器
查看触发器:与触发器有关的数据字典有: USER_TRIGGERS:存放当前用户的所有触发器。 ALL_TRIGGERS:存放当前用户可以访问的所有触发器。
[START WITH start] [INCREMENT BY increment] [MINVALUE minvalue|NOMINVALUE] [MAXVALUE maxvalue|NOMAXVALUE]
[CACHE cache|NOCACHE]
[CYCLE|NOCYCLE] [ORDER|NOORDER]
象,使用序列可以实现自动产生主键值。
序列不占用实际的存储空间,只是在数据字典中保存它的 定义信息。用户在自己模式中创建序列必须具有CREATE SEQUENCE系统权限,在其他模式中创建序列,则必须 具有CREATE ANY SEQUENCE系统权限。
序列
创建序列语法:
CREATE SEQUENCE sequence_name
2.编写存储过程:接收用户输入的部门编号,用for循环
和游标,打印出此部门的所有雇员的所有信息(使用循 环游标)
带参数的存储过程(二)
out参数:输出参数,由存储过程中的语句为其赋值, 返回给用户。
调用时,需要使用VARIABLE语句声明对应的变量接受
返回值,在调用过程时绑定该变量,语法如下: VARIABLE variable_name date_type; [,….] EXEC[UTE] procedure_name(:variable_name[,….])
用户的传值,又可以在过程体中修改其值,并将其返回。
该参数不接受常量值,只能使用变量为其传值。使用 EXEC[UTE]命令可以为变量赋值,并且变领命前夜需 要添加冒号。
带参数的存储过程(三)
带参数的存储过程(三)
实现数据交换
参数默认值
parameter_name parameter_type{[DEFAULT | :=]}value
触发器
1. DML触发器:针对DML事件,按触发的事件可以将
DML 触发器分为BEFORE触发器和AFTER触发器。DML
触发器还可以分为语句级触发器与行级触发器。 2. 替代触发器:INSTEAD OF触发器。用于执行一个替 代操作来代替触发事件的操作。 3. 系统事件触发器:发生在数据库启动或关闭等系统事 件时触发。 4. DDL触发器:由DDL语句触发,(CREATE ALTER DROP)。也可以分为BEFORE触发器和AFTER触 发器。
序列
序列
使用序列,需要使用序列的两个伪列NEXTVAL(返回序列生成的 下一值)和CURRVAL(返回序列的当前值)。 修改序列:ALTER SEQUENCE语句,除了序列的起始值之外,可 以重新定义序列的任何子句和参数进行修改。如果要修改序列的起 始值,则必须先删除序列,然后重新创建该序列。对序列进行修改
存储过程
课堂练习
创建一个简单的存储过程,调用该存储过程能够打印一
句话“hello world! this is the first procedure”。并通 过execute和call调用它看能否实现该功能。
带参数的存储过程(一)
IN参数:输入参数,默认为IN。调用时为参数赋值的形
式有两种:
1.不指定参数名:Oracle会自动按过程中参数的先后顺 序为参数赋值,如果不匹配(数据类型或者参数个数), 则返回错误。 2.指定参数名:可以不按参数顺序赋值,形式如下:
触发器
创建触发器: 语法: CREATE [OR REPLACE ]TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF]trigger_event {ON table_name|view_name|DATABASE} [FOR EACH ROW [ENABLE|DISABLE] [WHEN trigger_condition] [DECLARE declaration_statements;] BEGIN trgger_body; END [trigger_name];
P220,实践案例。
INSTEAD OF触发器
执行一个替代操作来代替出发事件的操作。触发事件本
身最终不会被执行。INSTEAD OF 触发器不能针对表,
只能针对视图。
系统事件触发器
由数据库系统事件触发的触发器,需要使用ON
DATABASE子句,表示创建的触发器是数据库级触发器,
创建系统事件触发器需要用户具有DBA权限。P218所示。
注意:在EXECUTE语句中绑定变量时,需要在变量名
前添加冒号(:)。
带参数的存储过程(二)
带参数的存储过程(二)
课堂练习:
1.使用out类型的参数返回雇员表中的雇员人数。
2.接收雇员号,输出该雇员的工资和提成,没有佣金的 用0替代。
带参数的存储过程(三)
IN OUT参数:同事拥有IN 和OUT参数的特性,既接受
程序包
修改和删除程序包
修改程序包 修改包只能通过带有OR REPLACE选项的CREATE PACKAGE语句重建。 删除程序包 DROP PACKAGE package_name;
触发器
触发器是一种特殊的存储过程,在发生某种数据库事件
时则等。 触发器的类型:DML触发器、替代触发器、系统事件触 发器和DDL触发器。
第十章
存储过程
主讲人:丁凰
存储过程
储过程是一组完成特定功能的sql语句集,存储过程经 过编译后存储在数据库中,所以执行存储过程要比执行 存储过程中封装的sql语句更有效率。 语法: CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter [IN|OUT|IN OUT] data_type)[,……]] {IS|AS} [declaration_section;] BEGIN procedure_body; END[procedure_name];
函数
三种方式调用:
程序包
使用程序包主要是为了实现程序模块化,程序包可以将 相关的存储过程、函数、变量、常量、游标等PL/SQL 程序组合在一起。 程序包主要分为:包规范和包体。
程序包
创建包规范:语法: CREATE [OR REPLACE]PACKAGE package_name {IS|AS} package_spacification; END package_name; 创建包体:语法: CREATE [OR REPLACE]PACKAGE BODY package_name {IS|AS} package_body; END package_name;
查询存储过程的定义信息
通过数据字典user_source.
修改和删除存储过程
修改:CREATE PROCEDURE语句中添加 OR REPLACE关键字,其他内容与创建存储过程是一 样的。 删除存储过程使用DROP PROCEDURE语句,形式如 下: DROP PROCEDURE procedure_name;
DBA_TRIGGERS:存放数据库中的所有触发器。
修改触发器: 通过带OR REPLACE选项的CREATE TRIGGER语句重建。
删除触发器
DROP TRIGGER trigger_name; 如果删除创建触发器的表或视图,则该触发器也将删除。
序列
序列是oracle提供的用于产生一系列唯一数字的数据库对
DML触发器
对应的trigger_event具体内容为:
{INSERT|DELETE|UPDATE[OF column[,….]]} 注意: •可以将DML操作细化到列,即针对某列进行DML操作时 激活触发器。 •任何DML触发器都可以按触发事件分为BEFORE触发器 和AFTER触发器。 •在行级触发器中,为了获取某列在dml操作前后的数据, oracle提供了两种特殊的标识符::OLD和:NEW。通 过:OLD.column_name的形式可以获取该列的旧数据 (DELETE使用),通过:NEW.column_name的形式可 以获取该列的新数据(INSERT使用),UPDATE触发器 两种都可以使用。
DML触发器
FOR EACH ROW
创建一个触发器,要求在更新工资时,工资只能涨不能跌。
语句级触发器
未使用FRO EACH ROW子句。语句级触发器被触发后只执行一次,而不 管这一操作会影响多少行。