08 ORACLE数据库中常见对象
第四章理论课数据库对象
《Oracle数据库应用》理论课数据库对象⏹本章技能目标◆使用同义词◆使用序列◆创建视图◆创建索引1.数据库对象Oracle 数据库对象又称模式对象。
数据库对象是逻辑结构的集合,最基本的数据库对象是表。
其他数据库对象包括:同义词,序列,视图,索引。
下面我们依次讲解这几个数据库对象的使用。
2.同义词同义词是数据库对象的一个别名,这些对象可以是表,视图,序列,过程,函数,程序包,甚至其它同义词,通过使用同义词,用户可以访问其它模式的数据库对象而无需指定模式前缀,例如用户USER1要访问用户USER2的表EMP,必须使用USER2.EMP,那么USER1就可以使用同义词像访问自己的表一样引用USER2.EMP了。
同义词有以下用途:简化SQL语句隐藏对象的名称和所有者提供对对象的公共访问为分布式数据库德远程对象提供了位置透明性同义词允许应用程序访问数据库对象,不论那个用户或哪个数据库拥有该对象。
但是同义词不能代替权限,在使用同义词之前确保用户已得到访问对象的权限。
可以通过同义词执行SELECT,INSERT,UPDA TE,DELETE,LOCK TABLE ,GRANT和REVOKE 等语句。
同义词只是表的一个别名,因此对它的操作都会影响到表。
同义词共有两种类型:公有同义词。
私有同义词。
2.1私有同义词和公有同义词2私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
要在自身的模式创建私有同义词,用户必须拥有CREATE SYNONYM 系统权限。
要在其它用户模式的创建私有同义词,用户必须CREATE ANY SYNONYM 系统权限.。
创建私有同义词语法如下:OR REPLACE 表示在同义词存在的情况下替换该同义词。
synonym_name 表示要创建的同义词的名称。
object_name 指定要为之创建同义词的对象的名称。
例1:假定两个用户模式:ACCP 和SCOTT ,SCOTT 用户拥有EMP表,ACCP 用户需要频繁引用EMP表,为了简化SQL语句,需要为ACCP 用户创建一个同义词。
数据库oracle基础知识
数据库oracle基础知识数据库Oracle是一款企业级关系数据库管理系统,被广泛应用于大型企业和政府机构。
为了从事Oracle数据库开发工作,需要掌握以下基础知识。
1. SQL语言SQL语言是Oracle数据库最常用的查询和管理语言。
它可以用于创建、修改和删除表格、存储过程和函数等对象。
SQL语言可以通过命令行工具或GUI工具(如Oracle SQL Developer)使用。
2. 数据类型Oracle数据库支持多种数据类型,包括字符型、数值型、日期型和布尔型等。
掌握各种数据类型的特点和使用方法对于正确存储数据非常重要。
3. 约束在Oracle数据库中,约束是定义表列或表之间关系的规则。
包括主键、外键、唯一约束和检查约束等。
理解和正确使用约束可以有效维护数据完整性。
4. 触发器触发器是一种在表上执行的操作,例如在插入、更新和删除时。
掌握触发器的创建和使用可以帮助开发者增强数据的一致性和完整性。
5. 存储过程和函数存储过程和函数是一些预定义的SQL语句,封装起来方便被调用。
存储过程和函数类似,但存储过程是没有返回值的,而函数则需要返回一个值。
掌握存储过程和函数的使用可以提高数据库的性能和效率。
6. 高可用性Oracle数据库提供了许多机制,确保在故障时保持数据库高可用性。
这包括了备份和恢复、灾备等方案。
掌握这些机制可以帮助开发者保障数据可靠性和业务连续性。
通过学习以上基础知识,可以使Oracle数据库开发者理解Oracle数据库的基本原理和概念。
并且可以使用这些知识来开发高效、高可用性、可扩展的Oracle数据库应用程序。
oracle数据库基本数据类型
oracle数据库基本数据类型
Oracle数据库有许多基本数据类型,包括:
1. 字符型:
- CHAR:固定长度的字符型,最长可达2000个字节。
- VARCHAR2:可变长度的字符型,最长可达4000字节。
- CLOB:用于存储大量文本数据的字符型,最长可达4GB。
- NCHAR:固定长度的Unicode字符型,最长可达2000个字节。
- NVARCHAR2:可变长度的Unicode字符型,最长可达4000字节。
- NCLOB:用于存储大量Unicode文本数据的字符型,最长可达4GB。
2. 数值型:
- NUMBER:用于存储数值数据的类型,包括整数和浮点数。
- BINARY_FLOAT:用于存储单精度浮点数。
- BINARY_DOUBLE:用于存储双精度浮点数。
3. 日期和时间型:
- DATE:用于存储日期和时间信息。
- TIMESTAMP:用于存储日期、时间和时区信息。
4. 二进制型:
- RAW:用于存储二进制数据的类型,最长可达2000字节。
- BLOB:用于存储大量二进制数据的类型,最长可达4GB。
5. BOOLEAN型:用于存储布尔值(TRUE或FALSE)。
这些基本数据类型可以通过组合和修饰符进行扩展和定制。
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是怎么⽐较的.映射⽅法具有效率⽅⾯的优势,因为它把每个对象与单个标量值联系在⼀起;排序⽅法有灵活⽅⾯的优势,它可以在两个对象之间进⾏任意复杂的⽐较.排序⽅法⽐映射⽅法的速度慢.。
oracle数据库面试题目(3篇)
第1篇1. 请简述Oracle数据库的体系结构,并说明各层的作用。
2. 请解释什么是Oracle实例?实例与数据库之间的关系是什么?3. 请简述Oracle数据库的存储结构,包括数据文件、控制文件、日志文件等。
4. 请说明Oracle数据库的内存结构,包括SGA、PGA等。
5. 请解释Oracle数据库的备份策略,包括全备份、增量备份、差异备份等。
6. 请说明Oracle数据库的恢复策略,包括不完全恢复、完全恢复等。
7. 请解释Oracle数据库的事务管理,包括事务的ACID特性。
8. 请说明Oracle数据库的锁机制,包括共享锁、排他锁等。
9. 请解释Oracle数据库的并发控制,包括多版本并发控制(MVCC)。
10. 请说明Oracle数据库的安全机制,包括角色、权限、用户等。
二、SQL语言1. 请简述SQL语言的组成,包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。
2. 请说明如何创建一个简单的表,包括表结构、字段类型、约束等。
3. 请编写一个查询语句,查询某个表中所有年龄大于30岁的记录。
4. 请编写一个更新语句,将某个表中年龄大于40岁的记录的年龄加1。
5. 请编写一个删除语句,删除某个表中年龄小于20岁的记录。
6. 请编写一个插入语句,插入一条记录到某个表中。
7. 请说明如何使用SQL语句实现分页查询。
8. 请说明如何使用SQL语句实现多表查询。
9. 请说明如何使用SQL语句实现子查询。
10. 请说明如何使用SQL语句实现联合查询。
三、Oracle高级特性1. 请解释什么是视图?如何创建视图?2. 请解释什么是索引?有哪些常见的索引类型?3. 请解释什么是触发器?如何创建触发器?4. 请解释什么是存储过程?如何创建存储过程?5. 请解释什么是函数?如何创建函数?6. 请解释什么是包?如何创建包?7. 请解释什么是序列?如何创建序列?8. 请解释什么是同义词?如何创建同义词?9. 请解释什么是物化视图?如何创建物化视图?10. 请解释什么是分区表?如何创建分区表?四、Oracle性能优化1. 请说明如何查看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;
Oracle用户角色与权限控制
alter user system identified by abc123;
12.2 权限
权限(Privilege)的最终作用对象是用户。即所有用 户在数据库内的操作对象和可执行的动作都是受到限制的。 Oracle中共有两种权限:系统权限和对象权限。
select * from system.t_employees order by employee_id;
12.3.2 继承角色
角色继承是指一个角色可以继承其他角色的权限信息, 从而减少自身使用grant的机会。
create role role_hr;
grant role_employee to role_hr;
grant update, insert on t_employees to role_hr;
select table_name, grantee, grantor, privilege from dba_tab_privs where table_name = 'T_EMPLOYEES';
create user cat identified by abc;
grant create session to cat;
grant role_hr to cat;
update system.t_employees set status = 'CXL' where employee_id = 13;
12.3.3 禁用和启用角色
每个用户登录数据库时,都可以获得其默认角色。可以 通过查询视图session_roles来获得当前会话下该用户的默 认角色。管理员可以禁用用户的默认角色,一旦禁用,则用 户从该角色获得的权限将不再有效。
oracle数据库查询用户语句
oracle数据库查询用户语句如何查询Oracle数据库中的用户。
想要查询Oracle数据库中的用户,我们可以使用一系列的SQL语句和命令来完成这项任务。
本文将详细介绍如何使用不同的方法查询Oracle数据库中的用户。
首先,我们需要登录到Oracle数据库。
可以使用命令行工具,如SQLPlus 或者SQL Developer登录。
一、使用SQL语句查询所有用户我们可以使用以下SQL语句来查询数据库中的所有用户:SELECT username FROM all_users;这条语句将返回数据库中所有用户的用户名。
二、使用系统视图查询用户Oracle数据库提供了许多系统视图,我们可以使用它们来查询用户信息。
以下是一些常用的系统视图及其用途:1. DBA_USERS:此视图包含了所有用户的信息,包括用户名、创建日期、过期日期等。
SELECT username, created, expiry_date FROM dba_users;这条语句将返回所有用户的用户名、创建日期和过期日期。
2. ALL_USERS:该视图包含了数据库中所有可访问的用户的信息。
SELECT username, created, expiry_date FROM all_users;这条语句将返回所有可访问的用户的用户名、创建日期和过期日期。
3. USER_USERS:这个视图包含了当前用户的信息。
SELECT username, created, expiry_date FROM user_users;这条语句将返回当前用户的用户名、创建日期和过期日期。
三、查询特定用户信息如果我们想查询特定用户的信息,可以使用以下SQL语句:SELECT username, created, expiry_date FROM dba_users WHEREusername = 'username';这条语句将返回指定用户名的用户的用户名、创建日期和过期日期。
oracle sql数据库基本知识
oracle sql数据库基本知识
OracleSQL是一种用于操作Oracle数据库的编程语言,是关系型数据库操作语言的一种。
它被广泛应用于企业级应用程序开发和管理中。
以下是Oracle SQL数据库基本知识:
1. 数据库对象:Oracle数据库由多个对象组成,包括表、索引、视图、存储过程等。
2. SQL语句:Oracle SQL包括多种SQL语句,如SELECT、UPDATE、INSERT、DELETE等,用于对数据库进行操作。
3. 数据类型:Oracle SQL的数据类型包括数字、字符、日期等。
4. 数据库连接:Oracle SQL可以通过JDBC或ODBC等连接方式与Oracle数据库进行连接。
5. 数据库管理:Oracle SQL可以用于管理数据库,如创建用户、授权、备份等。
6. 视图和存储过程:Oracle SQL支持视图和存储过程,用于简化和优化数据库操作。
7. 事务管理:Oracle SQL支持事务处理,保证数据库操作的一致性和可靠性。
总之,Oracle SQL是一种强大的数据库操作语言,具有广泛的应用价值。
掌握Oracle SQL的基本知识,可以提高企业级应用程序的开发和管理效率。
- 1 -。
Oracle数据库基础
Oracle数据库基础一.Oracle的数据类型1.字符型用来存储字符串或字符数据,主要类型有varchar2、char和long。
①varchar2用来存储可变长的字符串或字符型数据,在使用时,须指明其最大字节数据。
②char用来存储定长字符串或字符型数据,使用时也要指定长度,其缺省值为1。
③long用来存储可变长的字符串或字符型数据。
2.数字型数字型用于存储整数或实数。
主要有:number、binary_integer①number用于存储数字数据,包括整数或浮点数。
在实际应用中,应该指定该类型数据长度和小数的位数。
在Oracle中其指定的长度不包含小数点和符号位。
②binary_integer它是PL/SQL的一个数据类型,它用于带符号的整数值,以2的补码的二进制形式进行存储。
3.日期型DATE型用于存储日期和事件信息,包括世纪、年、月、日、时、分、秒,其占7个字节,每一部分占一个字节。
4.raw和long rawraw和long raw用来存储二进制数据。
①rawRaw类似于char,必须指定存储二进制数的最大字节书。
②long rawlong raw类似于long。
5.ROWID数据库表中的每一行(ROW)都有一个地址,通过查询伪例ROWID获得该行地址。
该伪例的值为16进制字符串,该串的数据类型为ROWID。
其字符值的形式为:BLOCK.ROW.FILE。
6.布尔型在表中无布尔型的字段类型,只有在PL/SQL中可以定义BOOLEAN型,它的值为TRUE、FALSE、NULL。
在定义BOOLEAN 型变量时可限定变量为NOT NULL,但此时必须为该变量初始化。
7.复合类型①记录记录定义的格式如下:TYPE Record_type IS RECORD(Field1 Datatype1 [NOT NULL][:=Expression1],Field2 Datatype2 [NOT NULL][:=Expression2],…);在上述格式中Record_type是一种定义的记录类型。
数据库的六个对象
数据库的六个对象
数据库的六个对象包括:
1. 表(Table):表是数据库中的最基本的对象,用于存储数据。
每个表由行(记录)和列(字段)组成,行代表数据的实例,列代表数据的属性。
2. 视图(View):视图是从一个或多个表中选择的特定列和行的虚拟表。
它可以用来简化复杂的查询、隐藏敏感数据和提供数据的不同逻辑视图。
3. 索引(Index):索引是用于加快数据检索速度的数据结构。
它可以通过对表中的一个或多个列创建索引来提高查询的性能。
4. 存储过程(Stored Procedure):存储过程是一组预编译的SQL语句,可以被多次调用。
它可以接受参数、执行一系列操作,并返回结果。
5. 触发器(Trigger):触发器是与表相关联的一段代码,它会在特定的数据库操作(如插入、更新、删除)发生时自动执行。
触发器常用于实现数据的完整性约束和业务规则。
6. 数据库(Database):数据库是一个包含相关数据的集合,它可以由多个表、视图、索引、存储过程和触发器组成。
数据库提供了持久化存储和管理数据的功能。
Oracle内置的表或视图
在ORACLE数据库中,有一些内置的表和视图,记录着一些数据库的相关信息:如我们建了哪些表,哪些用户,表有哪些字段等等,这些东西有时候是非常有用的。
1.几个重要的Oracle表或者视图如下:v$controlfile:控制文件的信息;v$datafile:数据文件的信息;v$log:日志文件的信息;v$process:处理器的信息;v$session:会话信息;v$transaction:事务信息;v$resource:资源信息;v$sga:系统全局区的信息。
上面的视图名中的‘v$’,只是视图名字中的字符。
类似于上面的视图或表还有很多,位于:$Oracle_HOME/RDBMS/ADMIN/CATALOG.SQL文件中。
这些视图或Oracle表可以在SQLPLUS中用SELECT语句进行查询。
2.数据字典视图表和列DBA_TABLES、ALL_TABLES和USER_TABLES显示了有关数据库表的一般信息。
DBA_TAB_COLUMNS、ALL_TAB_COLUMNS和USER_TAB_COLUMNS显示了每个数据库表的列的信息。
注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括Oracle 表。
完整性约束DBA_CONSTRAINTS、ALL_CONSTRAINTS和USER_CONSTRAINST显示有关约束的一般信息。
DBA_CONS_COLUMNS、ALL_CONS_COLUMNS和USER_CONS_COLUMNS显示有关列的相关约束的一般信息。
视图DBA_VIEWS、ALL_VIEWS和USER_VIEWS。
注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括视图。
序列DBA_SEQUENCES、ALL_SEQUENCES和USER_SEQUENCES。
注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括序列。
解析Oracle数据库中的对象集合schema
解析Oracle数据库中的对象集合schema搭建⼀个oracle,下⾯会有很多schema,每个schema下的数据都不影响。
感觉和mysql的库的概念很像,现在⽤的数据库管理系统其实也是这么划分的,mysql⽤的ip+port+库标识,oracle⽤ip+port+schema标识,平时还总听到⼀个实例的概念,我的理解就是实例就是⼀系列相关进程,代表了⼀个数据库服务。
⽬前线上为了节省资源,常常把机器分成多个实例,⽤不同的端⼝号标识,每个实例上有多个schema。
旭哥跟我说的很形象,oracle⼀个实例上有对应多个库。
mysql⼀个库上应多个实例。
mysql的建库很灵活。
websql中⼀⾏数据中,name为mgmt_view,displayName为mgmt_view@dev_crm,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:newcrm,jdbcusername为dev_ddl,DSName为dev_crm,DBName为newcrm(和jdbaURL上的⼀致),DBuser为mgmt_view,TNSName为dev_crm(应该是ora⽂件上的配置)。
name为stat,displayName为stat@dev_dbc ,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:dev-dbc,jdbcusername为dev_ddl,DSName为dev-dbc,DBName为dev-dbc(和jdbaURL上的⼀致),DBuser为stat,TNSName为dev_dbc(应该是ora⽂件上的配置),我本地的ora⽂件有如下配置:LOCALTEST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = localtest)))这⾥⾯有个serviceName,还有的地⽅是SID,另外最开始还有个LOCALTEST名字,这个标识链接描述符。
oracle lob大对象查找语句
一、概述Oracle数据库中LOB(大对象)类型是用来存储大量数据的一种数据类型,它可以存储大容量的文本、图像、音频或视瓶等多媒体数据。
在进行数据库查询时,查找LOB类型数据需要使用特定的语句和方法,下面将详细介绍Oracle数据库中查找LOB大对象的语句及使用方法。
二、使用DBMS_LOB进行LOB查找1. 使用DBMS_LOB.GETLENGTH函数获取LOB数据的长度当需要查找LOB数据时,首先需要获取LOB数据的长度,可以使用DBMS_LOB.GETLENGTH函数来获取。
该函数的使用方法为:SELECT DBMS_LOB.GETLENGTH(lob_column) FROMtable_name WHERE condition;2. 使用DBMS_LOB.SUBSTR函数获取部分LOB数据如果需要查找LOB数据的部分内容,可以使用DBMS_LOB.SUBSTR函数来获取。
该函数的使用方法为:SELECT DBMS_LOB.SUBSTR(lob_column, length, offset) FROM table_name WHERE condition;其中,length为需要获取的数据长度,offset为数据的偏移量。
3. 使用DBMS_LOB.INSTR函数查找LOB数据中的子串位置若要查找LOB数据中特定子串的位置,可以使用DBMS_LOB.INSTR函数来实现。
该函数的使用方法为:SELECT DBMS_LOB.INSTR(lob_column, substring, start, occurrence) FROM table_name WHERE condition;其中,substring为需要查找的子串,start为搜索的起始位置,occurrence为要查找的第几个匹配项。
三、使用空间类型进行LOB查找1. 使用EMPTY_CLOB函数和EMPTY_BLOB函数进行查找在Oracle数据库中,可以使用EMPTY_CLOB函数来查找空的CLOB类型数据,使用EMPTY_BLOB函数来查找空的BLOB类型数据。
Oracle数据库中的Cache对象
Oracle数据库中的Cache对象在Oracle10g之前,数据库中存在一个独一无二的Cache对象,这个对象就是:这个对象的名称来自于文件号和数据块号,1.417正好就是文件1的第417个数据块。
这个Cache对象在Oracle数据库中的含义非同一般,在bootstrap$的过程中,这个对象之前的所有对象都需要用来bootstrap。
我们看一下1.417之前的所有对象:一共有44个对象。
我们再来看一下初始化过程中bootstrap$中的信息:bootstarp的对象都是在1.417之前的,当然有部分对象是基于Cluster创建的。
那么这个对象在启动之前有什么作用呢?itpub上的jametong同学给出了一个重要的信息,在SYSTEM文件头, Oracle存储了一个root dba:Root dba: This field only occurs in data file #1, and is the location of blocks required during bootstrapping the data dictionary (bootstrap$)。
这个root dba指向了1.417对象,而1.417对象的上一个对象正是bootstrap$,Oracle 通过1.417找到了bootstrap$对象就可以启动了数据库。
我们可以从文件头的转储中找到这个root dba,以下是一个Oracle9i的数据文件头信息:这个root dba:0x004001a1 正好指向的是file 1 block 417而我们dump file 1 block 417就可以找到bootstrap$的地址:dba号00400179 正好指向的file 1 block 377。
在Oracle10g中,Oracle将这个root dba更改得更为直接:这里的root dba直接指向了0x00400179 ,也就是file 1 block 377。
Oracle数据库-主键(primarykey)、外键(foreignkey)、候选键(c。。。
Oracle数据库-主键(primarykey)、外键(foreignkey)、候选键(c。
主要介绍⼀下个⼈对主键(primary key)、外键(foreign key)、候选键(Candidate key)、超键(super key)、references的总结概念:主键:⽤户选择元组标识的⼀个候选键,主键不允许为空外键:来描述两个表的关系,外键可为空超键:能唯⼀的标识元组的属性集候选键:不含有多余属性的超键实例:假如有以下学⽣和教师两个表:Student(student_no,student_name,student_age,student_sex,student_credit,teacher_no)Teacher(teacher_no,teacher_name,teacher_salary)超键:Student表中可根据学⽣编号(student_no),或⾝份证号(student_credit),或(学⽣编号,姓名)(student_no,student_name),或(学⽣编号,⾝份证号)(student_no,student_credit)等来唯⼀确定是哪⼀个学⽣,因此这些组合都可以作为此表的超键候选键:候选键属于超键,且是最⼩的超键,即如果去掉超键组合中任意⼀个属性就不再是超键了。
Student表中候选键为学⽣编号(student_no),⾝份证号(student_credit)主键:主键是候选键中的⼀个,可⼈为决定,通常会选择编号来作为表的主键。
现分别选取student_no,teacher_no作为Student表,Teacher表的主键外键:teacher_no为两个表的公共关键字,且是Teacher表的主键,因此teacher_no是Student表的外键,⽤来描述Student表和Teacher表的关系--References⽤法创建⼀张Student表:Create table Student(student_no number(10) not null,student_name varchar2(10) not null,student_age number(4) not null,student_sex varchar2(4) not null,student_credit varchar2(18) not null,teacher_no number(10) not null,constraint PK_Student primary key(student_no) --设置主键);创建⼀张Teacher表:Create table Teacher(teacher_no number(10) not null,teacher_name varchar2(10) not null,teacher_salary number(10) not null,constraint PK_Teacher primary key(teacher_no) --设置主键);--创建外键约束alter table Student add constraint FK_Student_References_Teacher (teacher_no) references Teacher(teacher_no);。
oracle lob大对象查找语句
oracle lob大对象查找语句Oracle LOB(Large Object)是一种用于存储大量数据的数据类型,可以存储二进制文件、文本文件等大型数据。
在Oracle数据库中,LOB数据类型包括BLOB(二进制大对象)、CLOB(字符大对象)和NCLOB(国际字符集大对象)。
以下是关于Oracle LOB大对象查找的一些常用语句:1. 使用SELECT语句查找LOB大对象的内容:SELECT lob_columnFROM table_name;2. 使用SELECT语句查找LOB大对象的长度:SELECT LENGTH(lob_column)FROM table_name;3. 使用SUBSTR函数截取LOB大对象的一部分内容:SELECT SUBSTR(lob_column, start_position, length)FROM table_name;4. 使用DBMS_LOB.SUBSTR函数截取LOB大对象的一部分内容:SELECT DBMS_LOB.SUBSTR(lob_column, length, start_offset) FROM table_name;5. 使用TO_LOB函数将普通字段转换为LOB大对象类型进行查询:SELECT TO_LOB(column_name)FROM table_name;6. 使用EMPTY_BLOB()函数查找空的BLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_BLOB();7. 使用EMPTY_CLOB()函数查找空的CLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_CLOB();8. 使用EMPTY_NCLOB()函数查找空的NCLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_NCLOB();9. 使用LIKE子句模糊查找LOB大对象的内容:SELECT lob_columnFROM table_nameWHERE lob_column LIKE '%keyword%';10. 使用CONTAINS函数全文搜索LOB大对象的内容:SELECT *FROM table_nameWHERE CONTAINS(lob_column, 'keyword') > 0;以上是一些常用的Oracle LOB大对象查找语句,可以根据具体需求选择合适的语句进行查询。
oracle布尔类型
oracle布尔类型Oracle布尔类型是Oracle数据库中最基本的数据类型之一。
它能够储存布尔型值,即true或false,其中true表示“是”或“真”,false表示“否”或“假”。
Oracle布尔类型也可以用来表示可选择的值,例如“是”、“否”或“可能”。
Oracle布尔类型有两个子类:CHAR和VARCHAR。
CHAR是用来储存固定长度的字符,而VARCHAR则可以储存可变长度的字符。
Oracle布尔类型通常用于保存逻辑表达式的结果,以表明表达式的逻辑构成是正确的。
这种布尔类型可以用于处理复杂的逻辑表达式,并且可以帮助开发者构建复杂的SQL查询。
Oracle布尔类型的另一个功能是对缺失值进行处理,用于表示字段的值无法正确被记录下来,或者值没有被提供给系统。
Oracle布尔类型也可以用于储存数据库中的表达式结果,以支持布尔类型的比较操作,如>、=、!=、<=、>=等操作符。
Oracle布尔类型可以用于支持逻辑操作符,例如AND,OR,NOT。
这些操作符可以用于实现复杂的逻辑表示,用于控制SQL执行结果的语句。
Oracle布尔类型还可以用于存储复杂的数据结构,比如XML文档、JSON文档和表达式树。
存储这类复杂数据结构的布尔类型字段可以支持多种查询,以及检查和调试表达式的能力。
Oracle布尔类型可用于支持智能的计算,以及灵活的数据处理,这些操作大大提升了数据库的效率和性能。
此外,Oracle布尔类型还可以用于处理不同数据类型之间的转换,通过定义转换规则可以实现不同数据类型之间的转换。
总之,Oracle布尔类型是一种有用的数据类型,它可用于存储布尔型值,以及用于在不同的数据类型之间进行转换的工具。
Oracle 布尔类型还可以用于处理复杂的逻辑表达式,这是一种非常有用的特性,特别是在处理复杂的SQL查询时非常有帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序列、视图和索引
1
课程目标
序列的概念 序列的应用 视图的概念 视图的作用及应用 索引的特点 索引的创建、修改和删除 同义词
序列
生成唯一、连续的整数 用于生成主键值 Create Sequence 语句用于创建序列 序列可以是升序排序,也可以是降序排序
创建同义词可以简化对象访问(对象的另一个名字)。同义词能够: -另一个用户易于查阅表的所有者 -使对象名字变短
语法:
15
创建和删除同义词
为DEPT_SUM_VU视图创建一个短名字
删除同义词
16
视图
例如 CREATE OR REPLACE VIEW V_SALESMAN AS SELECT * FROM EMP WHERE JOB=’SALESMAN’ WITH READ ONLY;
视图
查看视图 例如 :查询用户SCOTT所拥有的全部视图的名称、 类型: SELECT view_name FROM ALL_VIEWS WHERE owner=’SCOTT’; 更改视图 alter view 视图名 as select 语句 重新编辑(Recompile)一个已存在的视图 ALTER VIEW 视图名 COMPILE; 删除视图 drop view 视图名
STUDENT
sid
cname
cphone
1234678 8745621 2132458
cclassid
C0001 C0001 C0002
A0001 Jim A0002 Mary A0003 Jack studnetView cname Jim mary
cclassid C0001 C0001
视图
索引的概念
索引是一种数据库对象,它是基于表中的一个列或多个 列的值,提供对表进快速访问的一种访问机制。索引的 目标是提高存取数据的速度。 优点:
可加速联接多个表的查询 可用于实施值的唯一性 缺点和使用原则: 创建索引要花时间 需要额外的存储空间 每次修改数据,索引都需更新 维护索引需要时间和资源,不应创建不会频繁 使用的索引
索引的修改
ALTER INDEX [schema.]索引名 [INITRANS integer] [MAXTRANS integer] [STORAGE storage_clause]
索引的删除
DROP INDEX [schema.]索引名 例如: DROP INDEX ID_STU;
同义词
视图的优点 • 提供了另外一种级别的表安全性 • 隐藏数据的复杂性 • 简化用户的 SQL 命令 • 将应用程序与基表定义的修改隔离开来 • 从另一个角度提供数据
视图
语法格式: CREATE [OR REPLACE] [[NO]FORCE] VIEW [模式.]视图名称 AS SELECT 子查询 [WITH READ ONLY]; CREATE VIEW命令的AS子句指定了视图的定义查询,视图的定 义查询的结果决定了视图的结构(列和行)。 OR REPLACE选项允许新视图替换已存在的一个同名视图,这将 省去删除旧视图的麻烦。FORCE选项表示强制建立视图,即使 在基本表不存在或无权访问基本表的情况下。 WITH READ ONLY选项表明创建的是只读视图,如果不指定该选 项,则建立的是可更新视图。 使用视图的优点 1、为用户提供数据 2、隐藏数据复杂性 3、提高数据安全性
索引的创建
CREATE [UNIQUE] INDEX [schema.]索引名 ON { [schema.]表名 (column [ASC|DESC][, column [ASC|DESC]] ...) | CLUSTER [schema.]cluster } 其中 UNIQUE 定义的是唯一索引确保在定义索引的 列中没有重复的值; Oracle 自动为主键和唯一键列创建唯一索引。 例如: CREATE UNIQUE INDEX ID_STU ON NEW_STU(STUNO);
序列
访问序列 Nextval Currval Alter Sequence 修改序列定义 Drop Sequence 从数据库中删除序列
视图
经过定制的表示方式,用来显示来自一个或多个表 的数据 也称为“虚拟表”或“已存储的查询” 基表 - 创建视图所依据的表
视图