第5章 Oracle模式对象

合集下载

计算机初级《信息系统运行管理员初级》要点考点手册(中)

计算机初级《信息系统运行管理员初级》要点考点手册(中)

计算机初级《信息系统运行管理员初级》要点考点手册(中)第5章信息系统数据资源维护【要点1】信息系统数据资源维护体系【要点2】信息系统数据资源例行管理【要点3】信息系统数据资源备份【要点4】云环境下的数据资源存储及维护【要点5】信息系统数据资源的开发与利用【要点6】数据库的相关知识本章要点本章主要介绍有关信息系统数据资源的运维体系、例行管理、备份与恢复、开发与利用,要点如下:(1)数据资源运维管理的对象、类型和内容。

(2)数据资源例行管理计划、数据资源载体的管理及数据库例行维护的概念和内容。

(3)数据资源备份的类型、备份相关技术,数据灾难恢复的管理。

(4)在云环境下数据资源存储及维护技术。

(5)数据资源开发与利用。

思考题(1)数据资源运维管理工作的主要内容是什么?(2)数据资源运维管理对象包括哪些?(3)常见的数据备份策略有哪些?(4)云环境下数据资源运维的特点有哪些?【要点1】信息系统数据资源维护体系1、体系概述数据资源运维体系2、数据资源维护的管理对象(1)数据文件;(2)数据管理系统;(3)存储介质。

3、数据资源维护的管理类型(1)运行监控①实时监控;②预防性检查;③常规作业;(2)故障响应①事件驱动响应;②服务请求响应③应急响应;(3)数据备份①数据备份;②数据恢复;③数据转换;④数据分发;⑥数据清洗;(4)归档检索;(5)数据优化。

4、数据资源维护的管理内容(1)维护方案;(2)例行管理;(3)应急响应;①制定应急故障处理预案,设立应急故障处理小组,确定详细的故障处理步骤和方法;②制定灾难恢复计划,进行灾难演练,以防备系统崩溃和数据丢失;③灾难发生后,应急故障处理小组能及时采取措施实现数据保护及系统的快速还原与恢复。

(4)数据资源的开发与利用。

【要点2】信息系统数据资源例行管理1、数据资源例行管理计划2、数据资源载体的管理(1)存储介质借用管理存储介质借用流程(2)存储介质转储管理存储介质转储流程(3)存储介质销毁管理存储介质销毁流程3、数据库例行维护(1)健康检查①数据库日志检查;②数据库一致性检查;(2)数据库监测管理①数据库基本信息监测;②数据库表空间监测;③数据库文件O监测;(3)数据库备份与恢复①数据库备份;②数据库故障及回复a.事务故障;b.系统故障;c.介质故障;(4)数据库性能优化:①空间释放其步骤是:在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。

《Oracle数据库应用与实践》课后习题参考答案

《Oracle数据库应用与实践》课后习题参考答案

第 5 章 Oracle 模式对象
一、填空题
1. 字段级约束 表约束
2. NOT NULL 约束 UNIQUE 约束 PRIMARY KEY 约束

3. CREATE TABLE
CREATE ANY TABLE
4. UNIQUE PRIMARY KEY CHECK
5. 合并索引 重建索引
6. user_updatable_columns
一、 填空题 1. 数据挖掘 隐含的 未知的 2. API-ODM Java API ODM DBMS_DM PL/SQL API
3. Clustering Association Feature Extraction
Oracle 数据库应用与实践
2、某 cc 表数据如下: c1 c2 -------------1西 1安 1的 2天 2气
Oracle 数据库应用与实践
3好 …… 转换为 1 西安的 2 天气 3好 要求:不能改变表结构及数据内容,仅在最后通过 SELECT 显示出这个查询结果
代码为: create or replace function x return varchar2 is type t_array is table of number index by binary_integer; type tarray is table of varchar2(10) index by binary_integer; ta t_array; tar tarray; re varchar2(10); n number; na varchar2(10); begin select id bulk collect into ta from (select id,name from xx order by id) group by id; for i in st loop dbms_output.put(ta(i)||' '); select name bulk collect into tar from xx where id=ta(i); for i in st loop dbms_output.put(tar(i)); end loop; dbms_output.put_line(' '); end loop; return re; end;

Oracle对象类型详解

Oracle对象类型详解

Oracle对象类型详解抽象数据类型1、创建类型--地址类型CREATE OR REPLACE TYPE AddressType AS OBJECT(Country varchar2(15),City varchar2(20),Street varchar2(30));2、类型嵌套--创建基于前⼀个类型的新的抽象数据类型:巨星类型CREATE OR REPLACE TYPE SuperStarType AS OBJECT(StarName varchar2(30),Address AddressType);3、基于抽象类型创建关系表CREATE TABLE SuperStar(StarID varchar(10),Star SuperStarType);4、基于抽象类型创建对象表CREATE TABLE SuperStarObj of SuperStarType;5、使⽤构造⽅法在表中插⼊记录INSERT INTO SuperStar VALUES(''001'',SuperStarType(''Zidane'',AddressType(''France'',''Paris'',''People Street NO.1'')));6、查询表中记录(1)SQL> SELECT * FROM SuperStar;STARID----------STAR(STARNAME, ADDRESS(COUNTRY, CITY, STREET))--------------------------------------------------------------------------------001SUPERSTARTYPE(''Zidane'', ADDRESSTYPE(''France'', ''Paris'', ''People Street NO.1''))(2)SELECT s.StarID,s.Star.StarName,s.Star.Address.Country,s.Star.Address.City,s.Star.Address.Street FROM SuperStar s STARID STAR.STARNAME STAR.ADDRESS.CO STAR.ADDRESS.CITY STAR.ADDRESS.STREET---------- ------------------------------ --------------- -------------------- ---------------------001 Zidane France Paris People Street NO.17、抽象数据类型的继承(1)创建⼀个类型CREATE OR REPLACE TYPE PersonType AS OBJECT(PersonName varchar(10),PersonSex varchar(2),PersonBirth date) not final;(2)派⽣⼀个类型CREATE OR REPLACE TYPE StudentType UNDER PersonType(StudentNO int,StudentScore int);(3)查看数据字典SQL> DESC StudentTypeStudentType extends SYS.PERSONTYPEName------------------------------------------------------------------------------PERSONNAMEPERSONSEXPERSONBIRTHSTUDENTNOSTUDENTSCORE(4)创建对象表CREATE TABLE student OF StudentType;(5)向对象表中插⼊数据INSERT INTO student VALUES(''Rose'',''nv'',to_date(''1983-05-02'',''yyyy-mm-dd''),1001,98);(6) 查询数据SQL> SELECT * FROM student;PERSONNAME PE PERSONBIR STUDENTNO STUDENTSCORE---------- -- --------- ---------- ------------Rose nv 02-MAY-83 1001 98⼆、可变数组1、创建带有可变数组的表(1)创建可变数组的基类型CREATE OR REPLACE TYPE MingXiType AS OBJECT(GoodID varchar2(20),InCount int,ProviderID varchar(20));(2)创建嵌套项类型的可变数组CREATE OR REPLACE TYPE arrMingXiType AS VARRAY(100) OF MingXiType;(3)创建⼀个主表CREATE TABLE InStockOrder(OrderID varchar(15) Not Null Primary Key,InDate date,OperatorID varchar(15),MingXi arrMingXiType);2、操作可变数组(1)插⼊数据INSERT INTO InStockOrderVALUES(''200710110001'',TO_DATE(''2007-10-11'',''YYYY-MM-DD''),''007'', arrMingXiType(MingXiType(''G001'',100,''1001''),MingXiType(''G002'',888,''1002'')));(2)查询数据SQL> SELECT * FROM InStockOrder;ORDERID INDATE OPERATORID--------------- --------- ---------------MINGXI(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------200710110001 11-OCT-07 007ARRMINGXITYPE(MINGXITYPE(''G001'', 100, ''1001''), MINGXITYPE(''G002'', 888, ''1002'') (3)使⽤Table()函数SQL> SELECT * FROM Table(SELECT t.MingXi FROM InStockOrder tWHERE t.OrderID=''200710110001'');GOODID INCOUNT PROVIDERID-------------------- ---------- --------------------G001 100 1001G002 888 1002(4)修改数据UPDATE InStockOrderSET MingXi=arrMingXiType(MingXiType(''G001'',200,''1001''),MingXiType(''G002'',8888,''1002''))WHERE OrderID=''200710110001''注意:不能更新VARRAY中的单个元素,必须更新整个VARRAY三、嵌套表1、创建嵌套表(1)创建嵌套表的基类型CREATE OR REPLACE TYPE MingXiType AS OBJECT(GoodID varchar2(20),InCount int,ProviderID varchar(20)) not final;(2)创建嵌套表类型CREATE OR REPLACE TYPE nestMingXiType AS TABLE OF MingXiType;(3)创建主表,其中⼀列是嵌套表类型CREATE TABLE InStockTable(OrderID varchar(15) Not Null Primary Key,InDate date,OperatorID varchar(15),MingXi nestMingXiType) Nested Table MingXi STORE AS MingXiTable;2、操作嵌套表(1)向嵌套表中插⼊记录INSERT INTO InStockTableVALUES(''20071012001'',TO_DATE(''2007-10-12'',''YYYY-MM-DD''),''007'',nestMingXiType(MingXiType(''G003'',666,''1001''),MingXiType(''G004'',888,''1002''),MingXiType(''G005'',8888,''1003'')));(2)查询数据SQL> SELECT * FROM InStockTable;ORDERID INDATE OPERATORID--------------- --------- ---------------MINGXI(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------------------------------------20071012001 12-OCT-07 007NESTMINGXITYPE(MINGXITYPE(''G003'', 666, ''1001''), MINGXITYPE(''G004'', 888, ''1002''), MINGXITYPE(''G005'', 8888, ''1003'') (3)使⽤Table()函数SQL> SELECT * FROM Table(SELECT T.MingXi FROM InStockTable tWHERE OrderID=''20071012001'')GOODID INCOUNT PROVIDERID-------------------- ---------- --------------------G003 666 1001G004 888 1002G005 8888 1003(4)更新嵌套表中的数据UPDATE Table(SELECT t.MingXi FROM InStockTable t WHERE OrderID=''20071012001'') ttSET tt.InCount=1666 WHERE tt.GoodID=''G003'';(5)删除表中数据DELETE Table(SELECT t.MingXi FROM InStockTable t WHERE OrderID=''20071012001'') ttWHERE tt.GoodID=''G003''四、对象表1、创建对象表CREATE TABLE ObjectTable OF MingXiType;2、向表中插⼊数据INSERT INTO ObjectTable VALUES(''G001'',500,''P005'');INSERT INTO ObjectTable VALUES(''G002'',1000,''P008'');3、查询对象表中的记录A 直接查询SQL> SELECT * FROM ObjectTable;GOODID INCOUNT PROVIDERID-------------------- ---------- ---------------G001 500 P005G002 1000 P008B ⽤VALUE()函数查询SQL> SELECT VALUE(O) FROM ObjectTable O;VALUE(O)(GOODID, INCOUNT, PROVIDERID)------------------------------------------MINGXITYPE(''G001'', 500, ''P005'')MINGXITYPE(''G002'', 1000, ''P008'')4、查看对象标志符(OID)A REF操作符引⽤⾏对象SQL> SELECT REF(t) FROM ObjectTable t;REF(T)--------------------------------------------------------------------------------0000280209771F103ED34842478A9C439CDAEFEF6324B0ACF849F14BD7A8B52F4B0297D1C90040A9 5A00000000280209A2D3359E0F0C44B3AF652B944F8823F524B0ACF849F14BD7A8B52F4B0297D1C90040A9 5A0001B 将OID⽤于创建外键CREATE TABLE Customer( CustomerID varchar(10) PRIMARY KEY,CustomerName varchar(20),CustomerGoods REF MingXiType SCOPE IS ObjectTable,--引⽤MingXiType外键,关联的是OID的值CustomerAddress varchar(20));C 向Customer表中插⼊数据,此表将从上⾯创建的对象表中引⽤数据INSERT INTO Customer SELECT ''007'',''Yuanhy'',REF(O),''France''FROM ObjectTable OWHERE GoodID=''G001'';D 查询Customer表SQL> SELECT * FROM Customer;CUSTOMERID CUSTOMERNAME---------- --------------------CUSTOMERGOODS-----------------------------------------------------------------------------CUSTOMERADDRESS--------------------007 Yuanhy0000220208771F103ED34842478A9C439CDAEFEF6324B0ACF849F14BD7A8B52F4B0297D1C9 FranceE ⽤DEREF操作符返回对象的值SQL> SELECT CustomerID,CustomerName,DEREF(t.CustomerGoods),CustomerAddress2 FROM Customer t;CUSTOMERID CUSTOMERNAME---------- --------------------DEREF(T.CUSTOMERGOODS)(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------------CUSTOMERADDRESS--------------------007 YuanhyMINGXITYPE(''G001'', 500, ''P005'')France五、对象视图将关系表化装成对象表1、创建对象视图A 创建基于关系表⽗表的对象类型CREATE OR REPLACE TYPE depttype AS OBJECT(deptid number(10),deptname varchar(30),loc number(10));B 创建基于关系表的对象视图CREATE VIEW deptview OF depttype WITH OBJECT OID(deptid) ASSELECT department_id,department_name,location_id FROM dept;C 查询视图SQL> SELECT * FROM deptview;DEPTID DEPTNAME LOC---------- ------------------------------ ----------10 Administration 170020 Marketing 180030 Purchasing 170040 Human Resources 240050 Shipping 150060 IT 140070 Public Relations 2700SQL> select ref(t) from deptview t;REF(T)----------------------------------------------------------------------------------------------------00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 2、创建引⽤视图(类似于关系表创建⼀个从表)CREATE VIEW empview AS SELECT MAKE_REF(deptview,department_id) deptOID,employee_id,first_name,last_name FROM emp;查询对象视图empviewSQL> SELECT * FROM empview;DEPTOID----------------------------------------------------------------------------------------------------EMPLOYEE_ID FIRST_NAME LAST_NAME----------- -------------------- -------------------------00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 100 Steven King00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 101 Neena Kochhar00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 102 Lex De Haan00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 103 Alexander HunoldOracle对象类型也有属性和⽅法.创建对象类型与创建表很相似,只是实际上不为存储的数据分配空间:不带⽅法的简单对象类型:CREATE TYPE type_name as OBJECT (column_1 type1,column_2 type2,...);注意:AS OBJECT创建好对象类型之后,就可以在创建表的时候,使⽤该类型了,如:CREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,NOTE VARCHAR2(300))稍后,可以⽤下⾯的语句查看:SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = ''TYPE''CREATE TABLE STUDENTS(GUID NUMBER NOT NULL,STUDENTS HUMAN)此下省去两个Trigger.插⼊数据的时候,可以如下:INSERT INTO STUDENTS (STUDENT) VALUES (HUMAN(''xling'',''M'',TO_DATE(''20060101'',''YYYYMMDD''),''测试''))注意:HUMAN(''xling'',''M'',TO_DATE(''20060101'',''YYYYMMDD''),''测试''),这是个默认的构造函数.如果想选出性别为⼥(F)的记录,可以如下:SELECT * FROM STUDENTS S WHERE S.STUDENT.SEX = ''F''注意:不能写成:SELECT * FROM STUDENTS WHERE STUDENT.SEX = ''F'' 这样会报如下错误:ORA-00904: "STUDENT"."SEX": 标识符⽆效对象类型表:每条记录都是对象的表,称为对象类型表.它有两个使⽤⽅法:1,⽤作只有⼀个对象类型字段的表.2,⽤作具有对象类型字段的标准关系表.语法如下:CREATE TABLE table_name OF object_type;例如:CREATE TABLE TMP_STUDENTS OF HUMAN;⽤DESC TMP_STUDENTS,可以看到它的字段结构和HUMAN的结构⼀样.对象类型表有两个优点:1,从某种程度上简化了对象的使⽤,因为对象表的字段类型与对象类型是⼀致的,所以,不需要⽤对象名来修饰对象属性,可以把数据插⼊对象类型表,就像插⼊普通的关系表中⼀样:INSERT INTO TMP_STUDENTS VALUES (''xling'',''M'',TO_DATE(''20060601'',''YYYYMMDD''),''对象类型表'');当然也可⽤如下⽅法插⼊:INSERT INTO TMP_STUDENTS VALUES (HUMAN(''snow'',''F'',TO_DATE(''20060102'',''YYYYMMDD''),''⽤类型的构造函数''));第⼆个特点是:对象表是使⽤对象类型作为模板来创建表的⼀种便捷⽅式,它可以确保多个表具有相同的结构.对象类型表在:USER_TABLES表⾥是查不到的,⽽在USER_OBJECTS表⾥可以查到,⽽且OBJECT_TYPE = ''TABLE''类型在定义的时候,会⾃动包含⼀个⽅法,即默认的构造器.构造器的名称与对象的名称相同,它带有变量与对象类型的每个属性相对应.对象类型的⽅法:CREATE TYPE type_name AS OBJECT (column1 column_type1,column2 column_type2,... ,MEMBER FUNCTION method_name(args_list) RETURN return_type,...)注意:是MEMBER FUNCTION,(当然,也可是MEMBER PROCEDURE,没有返回值)和包(PACKAGE)⼀样,如果对象类型有⽅法的话,还要声明⼀个BODY:CREATE TYPE BODY type_name ASMEMBER FUNCTION method_name RETURN return_type {AS | IS}variable declareations..BEGINCODE..RETURN return_value;END;//END MEMBER FUNCTION...END;//END TYPE BODY如下所⽰:CREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER)--BODYCREATE TYPE BODY HUMAN ASMEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;END;注意:BODY的格式,不是AS OBJECT,也不是⽤⼩括号括起来的.MEMBER FUNCTION 后的AS或IS不能省略.还以STUDENTS表为例(注:如果类型以被某个表使⽤,是不能修改的,必须把相关的表删除,然后把类型删除,在⼀个⼀个新建,这⾥就省略了,参见前⽂所述)SELECT S.STUDENT.GET_AGE() FROM STUDENTS S在提起注意:表名⼀定要有别名.GET_AGE()的括号不能省略,否则会提⽰错误.下⾯演⽰在⼀个匿名过程中的使⽤情况:SET SERVEROUTPUT ONDECLAREAA HUMAN;AGE NUMBER;BEGINAA := HUMAN(''xingFairy'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),''过程'');AGE := AA.GET_AGE();DBMS_OUTPUT.PUT_LINE(AGE);END;映射⽅法:映射⽅法是⼀种不带参数,并返回标准的标量Oracle SQL数据类型的⽅法,如NUMBER,VARCHAR2,Oracle将间接地使⽤这些⽅法执⾏⽐较运算.映射⽅法最重要的⼀个特点是:当在WHERE或ORDER BY等⽐较关系⼦句中使⽤对象时,会间接地使⽤映射⽅法.映射⽅法的声明只过是在普通⽅法声明的前⾯加⼀个 MAP⽽以,注意:映射⽅法是⼀种不带参数的⽅法.MAP MEMBER FUNCTION function_name RETURN return_type修改前⽂提到的HUMAN类型:--映射⽅法 MAPCREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,--注册⽇期 REGISTERDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER,MAP MEMBER FUNCTION GET_GRADE RETURN NUMBER)CREATE TYPE BODY HUMAN AS-----------------------MEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;------------------------MAP MEMBER FUNCTION GET_GRADE RETURN NUMBER ASBEGINRETURN MONTHS_BETWEEN(SYSDATE,BIRTHDAY);END;END;插⼊数据:INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''xling'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20020915'',''YYYYMMDD''),''测试MAP⽅法''));INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''fairy'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20010915'',''YYYYMMDD''),''测试MAP⽅法''));INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''snow'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20020915'',''YYYYMMDD''),''测试MAP⽅法''));在执⾏上⾯的操作后,⽤下⾯这个SELECT语句可以看出映射⽅法的效果:SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S ORDER BY STUDENT它是按MAP⽅法GET_GRADE()的值进⾏排序的.注意是ORDER BY STUDENT,在提起⼀次需要注意,⼀定要⽤表的别名,⽅法后的括号不能省略,即使没有参数.如果想以MAP⽅法的结果为条件,可以如下:SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S WHERE S.STUDENT.GET_GRADE() > 50 SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S WHERE STUDENT >HUMAN(NULL,NULL,NULL,TO_DATE(''20020101'',''YYYYMMDD''),NULL);排序⽅法:先说⼀下SELF,Oracle⾥对象的SELF和JAVA⾥的this是同⼀个意思.对象的排序⽅法具有⼀个与对象类型相同的参数,暂称为ARG1,⽤于和SELF对象进⾏⽐较.如果调⽤⽅法的SELF对象⽐ARG1⼩,返回负值,如果相等,返回0,如果SELF⼤于ARG1,则返回值⼤于0.--映射⽅法 MAPCREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,REGISTERDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER,ORDER MEMBER FUNCTION MATCH(I_STUDENT IN HUMAN) RETURN NUMBER)CREATE TYPE BODY HUMAN AS-----------------------MEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;------------------------ORDER MEMBER FUNCTION MATCH(I_STUDENT IN HUMAN) RETURN NUMBER ASBEGINRETURN REGISTERDAY - I_STUDENT.REGISTERDAY;END;END;注意:在声明的时候,ORDER⽅法的参数类型要和SELF的类型⼀致.SET SERVEROUTPUT ONDECLARES1 HUMAN;S2 HUMAN;BEGINS1 := HUMAN(''xling'',NULL,NULL,TO_DATE(''20020915'',''YYYYMMDD''),NULL);S2 := HUMAN(''snow'',NULL,NULL,TO_DATE(''20010915'',''YYYYMMDD''),NULL);IF S1 > S2 THENDBMS_OUTPUT.PUT_LINE();ELSIF S1 < S2 THENDBMS_OUTPUT.PUT_LINE();ELSEDBMS_OUTPUT.PUT_LINE(''EQUAL'');END IF;END;注意S1 和 S2是怎么⽐较的.映射⽅法具有效率⽅⾯的优势,因为它把每个对象与单个标量值联系在⼀起;排序⽅法有灵活⽅⾯的优势,它可以在两个对象之间进⾏任意复杂的⽐较.排序⽅法⽐映射⽅法的速度慢.。

ORACLE11g试题答案(陈冬亮)

ORACLE11g试题答案(陈冬亮)

目录第一章 Oracle 11g 介绍......................................... 错误!未定义书签。

第二章 ORACLE 11g 的体系结构................................... 错误!未定义书签。

第三章 ORACLE 11g 的数据库管理................................. 错误!未定义书签。

第四章 ORACLE 11g 的表空间管理................................. 错误!未定义书签。

第五章 ORACLE 11g 的表管理..................................... 错误!未定义书签。

第六章 ORACLE 11g 的数据查询................................... 错误!未定义书签。

第七章 ORACLE 数据的基本操作................................... 错误!未定义书签。

第八章索引 ................................................... 错误!未定义书签。

第九章视图 ................................................... 错误!未定义书签。

第十章 PL/SQL基础............................................. 错误!未定义书签。

第十一章存储过程与函数........................................ 错误!未定义书签。

第十二章触发器 ............................................... 错误!未定义书签。

第十三章游标 ................................................. 错误!未定义书签。

Oracle从入门到精通-经典

Oracle从入门到精通-经典
Oracle 企业管理器为管理员提供了图形化的用 户界面,并集成了管理数据库的工具
28
Oracle 默认用户
只有用合法的用户帐号才能访问Oracle数据库 Oracle 有几个默认的数据库用户
Oracle 默认用户
SYS
SYSTEM
SCOTT
数 来SYS据维表SC库护T和OE中系T视MT所统图用是有信。户默数息通是认据和常O的字管r通a系典 理c过统le表 实S管数Y和例理S据视。T员库E图M,的都用该一存户用个储管户示在理拥范S数有帐Y据OS户r库模,ac用式在le户管中数、理。据权工S库Y限具安S和使用装存用户时储的主创等内要建部用
LGWR 日志写入进程 负责将日志缓冲区中的日志数据写入日志文件。 系统有多个日志文件,该进程以循环的方式将数据写入文件。
18
Oracle 物理组件
物理组件就是Oracle数据库所使用的操作系统物 理文件。物理文件可分为三类:
物理组件
数据文件
控制文件
日志文件
数 控据制文件日用是志于记文存录件储数记数据录据 库对库 物数数 理据据 结库, 构的如 的所表 二有、 进修索 制改引 文信数 件息据 。,等用。于故障恢复
SiSPQQLL/LS**PQPlLluus是s是可SO以Qra执Lcl的行e最扩能常展用用。SQ的PLL工*/PS具lQu之sL完结一成合,的用了所于S有Q接L任受语务和言。执的该行数工S据具Q操L的命纵优令能势以力 及 在P于L能/S通QL过块浏。览器访和问过它程。语言的流程控制能力
27
Oracle 企业管理器
5
Oracle 数据库简介 2-2
Oracle数据库基于客户端/服务器技术
网络
请求
服务器

第5章_Oracle PL SQL语言及编程--包、触发器、同义词、序列

第5章_Oracle PL SQL语言及编程--包、触发器、同义词、序列

O r a c l e 数 据 库 与 应 用
删除包体和删除包 举例
例: DROP PACKAGE BODY EXPP; SELECT NAME FROM USER_SOURCE WHERE TYPE=‘PACKAGE’; --找到包EXPP DROP PACKAGE EXPP; --删除包EXPP
数据库管理
数据库应用
O r a c l e 数 据 库 与 应 用
本章学习要点
(1)PL/SQL的程序结构 (2) PL/SQL的字符集、标识符
(3) 数据类型、常量和变量
(4)结构控制语句 (5)游标的概念和使用 (6)过程的创建、调用和删除 (7)函数的创建、调用和删除 (8)包、触发器、同义词、序列的创建和使用
O r a c l e 数 据 库 与 应 用
5.6.2 创建触发器
触发器创建(权限:CREATE [ANY] TRIGGER),简化语法如下: CREATE [OR REPLACE] TRIGGER 触发器名 { BEFORE | AFTER } {INSERT | DELETE | UPDATE [OF column [, column …]]} [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...] ON [schema.]表名| [schema.]视图 [FOR EACH ROW ] [WHEN condition] PL/SQL块 | CALL procedure_name;
第5章 Oracle PL/SQL语言及编程
本章 学习导航
闪回技术 Oracle 11g 安装与配置 数 据 库 应 用 程 序 开 发
高级管理
数据库备份与恢复 数据库存储管理 数据库安全管理 PL/SQL编程基础 视图和索引操作

oracle模式对象的管理

oracle模式对象的管理

oracle模式对象的管理【开发语言及实现平台或实验环境】Oracle10g【实验目的】(1)学习基本数据库表的创建,表结构的修改与删除等命令;(2)学习索引的管理命令;(3)学习索引化表的管理命令(4)学习分区表的管理命令(5)学习簇、视图、序列、同义词等的管理命令【实验原理】1.基本表的管理(1)表的创建:Create命令:CREATETABLEtable_name(column_nametype(ize),column_nametype(i ze),…);或CREATETABLEtable_name[(column_name,…)]ASSELECTtatement;表名命名规则所用的表名必须满足下面的条件:a)名字必须以A-Z或a-z的字母开始;b)名字可以包括字母、数字和特殊字母(_)。

字符$和#也是合法的,但是这种用法不提倡;c)名字大小写是一样的;例如EMP、emp和eMp是表示同一个表;d)名字最长不超过30个字符;e)表名不能和其它的对象重名;f)表名不能是SQL保留字。

字段类型:完整性约束:Oracle允许用户为表和列定义完整性约束来增强一定的规则。

可分为:表约束和字段约束约束类型如下:1)NOTNULL约束NOTNULL约束保证字段值不能为NULL。

没有NOTNULL约束的字段,值可以为NULL。

2)UNIQUE约束指定一个字段或者字段的集合为唯一键。

在表中没有两行具有相同的值。

如果唯一键是基于单条记录的,NULL是允许的。

表约束命令格式:,[CONSTRAINTcontraint_name]UN IQUE(Column,Column,…)字段约束命令格式:[CONSTRAINTcontraint_name]UNIQUE例如:CREATETABLEDEPT(DEPTNONUMBER,DNAMEVARCHAR2(9),LOCVARCHAR2(10),CONSTRAINTUNQ_DEPT_LOCUNIQUE(DNAME,LOC));UNQ_DEPT_LOC是一个表约束。

oracle数据库对象

oracle数据库对象

15
临时表
临时表:在一个会话或者是一个事务中保存临时数据的表。 有两种类型: 会话临时表(Session-Specific Temporary Table ) CREATE GLOBAL TEMPORARY TABLE ... [ON COMMIT PRESERVE ROWS ] 事务临时表(Transaction-Specific Temporary Table ) CREATE GLOBAL TEMPORARY TABLE ... [ON COMMIT DELETE ROWS ]
26
重建索引
为什么要重建索引? 对索引的表中的数据进行频繁的更新操作和删除时, 会导致索引的表空间中产生大量的碎片,会对查询和DM L语句的性能造成很大的影响;同时,会导致空间的浪费; 如何重建? 可以使用alter index ….. Rebuild来进行索引的重 建工作。

21
唯一索引
唯一索引 • 确保在定义索引的列中没有重复的值 • Oracle 自动为主键和唯一键列创建唯一索引 • CREATE UNIQUE INDEX 语句用于创建唯一索引

22
组合索引
组合索引 • 在表的多个列上创建的索引 • 也称为“连接索引” • 组合索引中的列可以按任意顺序排列 • 对于在 WHERE 子句中包含多个列的查询,可以提高数据 访问速度
4
表空间分类
表空间分为本地管理表空及字典管理表空二大类: a.本地管理表空 本地管理表空: 本地管理表空 减少了对数据字典表的争用 分配或回收空间时不生成还原数据 无需合并 建立本地管理表空方法如下:
CREATE TABLESPACE userdata DATAFILE ‘/home/ecif/oradata/dbs/userdata01.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

表已创建。
1-10
《Oracle数据库应用与实践》.
管理表
增加字段 修改字段名称
管理字段
修改字段的数据类型
删除字段
管理操作
重命名表 移动表
管理表
截断表 删除表
1-11
《Oracle数据库应用与实践》.
1、管理字段
(1)增加字段 为表增加字段的语法格式如下:
ALTER TABLE table_name ADD(column_name1 datatype [[,column_name2 datatype] …]);
表是常见的一种组织数据的方式,一 张表一般都具有多个列,或者称为字段。 每个字段都具有特定的属性,这些属 性在创建表时被确定。
1-5
《Oracle数据库应用与实践》.
创建表
• 创建表时需要使用CREATE TABLE语句。 • 此外,用户还必须在指定的表空间中具有一 定的配额存储空间。
1-6
《Oracle数据库应用与实践》.
1-24
《Oracle数据库应用与实践》.
【例5-21】分别创建学生表(student_7)(包含学号(sno)、姓名 (sname)、性别(ssex)和班级号(classid))和班级表(class)(包含班级 号(classid)、班级名称(classname)和班级人数(classcount)),表结构定 义见表5-2和表5-3。并使用外键关联这两个表。 SQL> CREATE TABLE class ( 2 classid NUMBER PRIMARY KEY, 3 classname VARCHAR2(30), 4 classcount NUMBER 5 ); 表已创建。 SQL> CREATE TABLE student_7 ( 2 sno CHAR(10), 3 sname VARCHAR2(30), 4 ssex CHAR(2), 5 classid NUMBER, 6 CONSTRAINT student_7_class FOREIGN KEY ( classid ) 7 REFERENCE class ( classid ) 8 );
1-19
《Oracle数据库应用与实践》.
UNIQUE(唯一性)约束 1. 定义单个字段的UNIQUE约束
单个字段的UNIQUE约束定义一般应在该字段定义完毕后 指定。
2. 定义多个字段的UNIQUE约束
多个字段的UNIQUE约束定义必须在所有字段定义完毕后 再指定,并且必须明确指定约束名。
3. 删除UNIQUE约束
创建表
Hale Waihona Puke 说明: 1. 表、列和其它数据库模式对象的名称,必须是合法 标识符,长度为1~30 字节,并且以字母开头。 2. 在使用PCTFREE和PCTUSED子句时要注意使用原 则。 3. 在Oracle 11g中,除了INITIAL参数外,其余参数 都会变为空值。
1-7
《Oracle数据库应用与实践》.
1. 在数据字典和控制文件中记录下新创建的表空间。 2. 在操作系统中按指定的位置和文件名创建指定大小的操作 系统文件,作为该表空间对应的数据文件。 3. 在预警文件中记录下创建表空间的信息。
表空间和数据文件的维护:
维护表空间的操作包括重命名表空间和数据文件,改变表空 间和数据文件的状态,设置默认表空间,扩展表空间,删除表空 间及数据文件,以及查看表空间和数据文件的信息等。
1-21
《Oracle数据库应用与实践》.
PRIMARY KEY(主键)约束 1. 定义单个字段的PRIMARY KEY约束
单个字段的PRIMARY KEY约束定义一般应在该字段定义完 毕后指定。
2. 定义多个字段的PRIMARY KEY约束
多个字段的PRIMARY KEY约束定义必须在所有字段定义完 毕后再指定,并且必须明确指定约束名。
ALTER TABLE table_name MODIFY column_name new_datatype;
(4)删除字段 一次删除表中一个字段的语法格式如下:
ALTER TABLE table_name DROP COLUMN column_name;
一次删除表中多个字段的语法格式如下:
ALTER TABLE table_name DROP (column_name1, …);
3. 删除PRIMARY KEY约束
删除字段上的PRIMARY KEY约束,可以使用ALTER TABLE … DROP语句,但删除时需要指定约束名,形式如下:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
1-22
《Oracle数据库应用与实践》.
【例5-18】创建一个学生表(student_5),表中包括学号(sno)、 姓名(sname)、性别(ssex)、出生日期(sbirthday)、邮箱 (semail)、所在系(sdept),要求为学号(sno)定义PRIMARY KEY约束。 SQL> CREATE TABLE student_5 ( 2 sno CHAR(10) PRIMARY KEY, 3 sname VARCHAR2(30), 4 ssex CHAR(2), 5 sbirthday DATE, 6 semail VARCHAR2 (25), 7 sdept VARCHAR2 (30) 8 ); 表已创建。
第5章 Oracle模式对象
《Oracle数据库应用与实践》
复 习 提 问
回顾
• • 创建表空间的方法 表空间和数据文件的维护
引入
• • • Oracle数据库为什么要引入逻辑结构类? 简述表空间的基本功能。 了解表空间和数据文件的概念及关系。
1-2
《Oracle数据库应用与实践》.
复习1:影响数据库系统性能的要素 在表空间的创建过程中,Oracle 会完成以下工作:
【例5-3】为已创建的学生表(student_1)增加新字段手机号(stelephone)、邮箱(semail)和 通信地址(saddress)。 SQL>ALTER TABLE student_1 2 ADD (stelephone CHAR(11), semail VARCHAR2(20), saddress VARCHAR2(50)); 表已更改。 使用DESCRIBE命令查看student表的结构,观察是否已经为该表成功添加新字段手机号( stelephone): SQL>DESCRIBE student_1 名称 是否为空? 类型 ----------------------------------------------------- ---------------SNO CHAR(10) SNAME VARCHAR2(30) SSEX CHAR(2) SBIRTHDAY DATE SDEPT VARCHAR2 (30) STELEPHONE CHAR(11) SEMAIL VARCHAR2 (20) SADDRESS VARCHAR2 (50) 《Oracle数据库应用与实践》.
1-16
二、表的约束的定义及使用方法
按照约束的用途可将表的完整性约束分为以下五类: (1)NOT NULL:非空约束。 (2)UNIQUE:唯一性约束。 (3)PRIMARY KEY:主键约束。 (4)FOREIGN KEY:外键约束。 (5)CHECK:检查约束。
1-17
《Oracle数据库应用与实践》.
1-18
《Oracle数据库应用与实践》.
【例5-15】创建一个学生表(student_2),表中包括学号 (sno)、姓名(sname)、性别(ssex)、出生日期 (sbirthday)、邮箱(semail)、所在系(sdept),要求为姓名 (sname)定义NOT NULL约束。 SQL> CREATE TABLE student_2 ( 2 sno CHAR(10), 3 sname VARCHAR2(30) CONSTRAINT sname_notnull NOT NULL, 4 ssex CHAR(2), 5 sbirthday DATE, 6 semail VARCHAR2 (25), 7 sdept VARCHAR2 (30) 8 ); 表已创建。
创建表
【例5-1】创建一个学生表(student_1),表 中包括学号(sno)、姓名(sname)、性别 (ssex)、出生日期(sbirthday)、所在系 (sdept)。
1-8
《Oracle数据库应用与实践》.
创建表
SQL> CREATE TABLE student_1 ( 2sno CHAR(10), 3sname VARCHAR2(30), 4ssex CHAR(2), 5sbirthday DATE, 6sdept VARCHAR2 (30) 7); 表已创建。
如果UNIQUE约束未指定名称,删除时,可以使用ALTER TABLE … DROP语句,形式如下:
ALTER TABLE table_name DROP (column_name);
1-20
《Oracle数据库应用与实践》.
【例5-16】创建一个学生表(student_3),表中包括学号(sno)、姓 名(sname)、性别(ssex)、出生日期(sbirthday)、邮箱(semail)、 所在系(sdept),要求为邮箱(semail)定义UNIQUE约束。 SQL> CREATE TABLE student_3 ( 2 sno CHAR(10), 3 sname VARCHAR2(30), 4 ssex CHAR(2), 5 sbirthday DATE, 6 semail VARCHAR2 (25) CONSTRAINT semail_unique UNIQUE, 7 sdept VARCHAR2 (30) 8 ); 表已创建。
相关文档
最新文档