Oracle数据库学习中的六条经验总结

时间:2019-05-13 09:13:36下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Oracle数据库学习中的六条经验总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Oracle数据库学习中的六条经验总结》。

第一篇:Oracle数据库学习中的六条经验总结

Oracle数据库学习中的六条经验总结

以下的文章主要是介绍在Oracle数据库学习中的六条经验总结,其实想学好Oracle数据库并不是一件很困难的事情,很多人都认为Oracle数据库的体系过于庞大,在学习的过程中摸不到头绪,以下的文章就会给你提供相关的解答方法。

1、如果有一定的数据库基础知道SQL是怎么回事,即使写不出来简单的SQL,但可以看动它们,你就可以跳到2。否则请先看一下数据库基础和SQL语言,不需要很深,更不需要去记忆那些复杂的SQL命令,这些可以留在以后边应用边学习、记忆。

2、要想学好Oracle数据库,首先要学习ORACLE的体系结构,现在你不需要深入理解它们,但要分清几个关键的概念:instance&database, memory structure,process&those files,such as data file, control file,init parameter file etc以及database ,tablespace,data file和tablespace,segmnet,extent & block它们之间的关系。

当然还要分清undo tablespace & redo log file等,对于很多初学者来说,能够对这些概念有个较为清晰的认识并不是一件容易的事,而这些并非Oracle的全部。

3、是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作,就是如何去管理ORACLE数据库,当然不是管理全部的ORACLE。在此过程中你将对SQL和ORACLE体系结构有个更深入的了解。

4、到了这一步你基本上算是初步掌握了ORACLE,下面将要根据你的方向来具体学习其它的ORACLE知识了。如果你是开发人员,则需要更多地去学习PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA,请继续。

5、现在你可以根据自己的实际情况,进行有选择的学习,也就是说下面的内容没有特别顺序要求。可以选择深入学习ORACLE数据库的管理、备份与恢复、性能调整、网络等。当然在学习这些知识的过程中,如果有实际的工作更好,这样你可以在实际中成长,学会TROUBLE SHOOTING。

6、当然在学习的过程中,你可以在网站或论坛中与他人进行交流,可以看别人的一些经验文章,也可以自己写一些心得体会。技术进步的本身就是经验的积累和提炼过程,希望大家共同成长,欢迎大家相互交流。

第二篇:ORACLE数据库开发经验总结

ORACLE数据库开发经验总结

----ORACLE数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大 份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成 为IT业界瞩目的焦点。岭澳核电站的数据库平台采用了ORACLE7.3作为后端平台,前端选 择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作为开发工具,采用了目前流行的

CLIENT/SERVER模式。本人在ORACLE系统的开发中,就ORACLE的整套开发工具提出一些自

己的体会,供同行参考。

----一.ORACLE SQL PLUS 使用技巧:----①查找重复记录:

SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。----删除重复记录:

DELETE FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。----② 快速编译所有视图

----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因 为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快 速编译。

SQL >SPOOL ON.SQL SQL >SELECT ‘ALTER VIEW ‘||TNAME||’

COMPILE;’ FROM TAB;SQL >SPOOL OFF 然后执行ON.SQL即可。

SQL >@ON.SQL 当然,授权和创建同义词也可以快速进行,如:

SQL >SELECT ‘GRANT SELECT ON ’ ||TNAME||’ TO USERNAME;’ FROM TAB;SQL >SELECT ‘CREATE SYNONYM

‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;③ 用外联接提高表连接的查询速度

在作表连接(常用于视图)时,常使用以下方法来查询数据: SELECT PAY_NO, PROJECT_NAME FROM A WHERE A.PAY_NO NOT IN(SELECT PAY_ NO FROM B WHERE VALUE >=120000);----但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因 为NOT IN要进行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外

联接后,可以缩短到1分左右的时间: SELECT PAY_NO,PROJECT_NAME FROM A,B WHERE A.PAY_NO=B.PAY_NO(+)AND B.PAY_NO IS NULL AND B.VALUE >=12000;----④ 怎样读写文本型操作系统文件

----在PL/SQL 3.3以上的版本中,UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下: DECALRE FILE_HANDLE UTL_FILE.FILE_TYPE;BEGIN

FILE_HANDLE:=UTL_FILE.FOPEN(‘C:’,’TEST.TXT’,’A’);

UTL_FILE.PUT_LINE(FILE_HANDLE,’ HELLO,IT’S A TEST TXT FILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;----相关UTL_FILE数据库包详细信息可以参见相关资料。----⑤ 怎样在数据库触发器中使用列的新值与旧值

----在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改 前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_ NO,:NEW.DEPT_NO。

----二.ORACLE DEVELOPER 2000使用技巧:

----① 改变FORM(FMX模块)运行时的Runform4.5的题头:

----DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows

/ NT 你可以改为自己定义的标题,----1.在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE----2.在此触发器中写如下代码:

set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT SYSTEM 欢迎使用');----② 如何隐藏菜单中的window选项:

----在创建自己的菜单时,最后选项总有window项,下面介绍如何去掉它,----1.创建一个Menu

----2.在Menu中建立一个Item,命名为WINDOW。----3.设置该Item属性如下:----

Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:为空

----③ 怎样创建动态下拉列表List

----Developer 2000 中的列表是通过设置相关属性而完成数据项的列表设置的,但那

只是静态的,有时你想让某项成为动态的列表,随输入数据的改变而改变,就需要动手 去编个小程序。下面详细介绍怎样去做:----有块EBOP_CABLE_ACCOUNT,下有SPECIFICATION数据项,当一进入该模块时,就将

SPECIFICATION项在数据库中存储的值动态显示出来,先在Form4.5中建立一个PRCEDURE,命名为DYN_LIST: PROCEDURE DYN_LIST IS

CURSOR C1 IS

SELECT DISTINCT(SPECIFICATION)FROM EBOP_CABLE_ACCOUNT;CNT NUMBER;i NUMBER;TNAME EBOP_CABLE_ ACCOUNT.SPECIFICATION%TYPE;BEGIN

CLEAR_LIST('EBOP_CABLE_ ACCOUNT.SPECIFICATION');SELECT COUNT(DISTINCT

(SPECIFICATION))INTO CNT FROM EBOP _CABLE_ACCOUNT;open C1;FOR i IN 1..CNT LOOP

FETCH C1 INTO TNAME;EXIT WHEN C1%NOTFOUND OR C1%NOTFOUND IS NULL;ADD_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',i,TNAME,TNAME);END LOOP;DELETE_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);CLOSE C1;END;然后在FORM的WHEN-NEW

-FORM-INSTANCE触发子中加入一行: DYN_LIST;----这样一进入该FMX,就会动态刷新该列表。除此之外,SPECIFICATION数据项改为列 表项。

----④ 当显示多条记录且数据项特别多时,如何组织录入及显示界面:----如上图所示,PRN代码及设备代码在画布1(CONTENT型)上,其它数据项在画布2(ST ACK型)上,所有数据项为一个表的列或一个块的数据项。在拉动水平滚动条时或用TAB或 敲回车键时,将看到全部数据项。这种排布方法适用于数据项特别多又想显示多条记录 时用。主要制作顺序为:先建立两个画布,画布1(CONTENT型),画布2(STACK型),然后

建立块,选画布时用画布1,这样所有项都显示在画布1上,然后选中除PRN代码及设备代 码之外的所有数据项,选TOOLS菜单下的PROPERTIES选项,将这些数据项的CANVAS属性选

为画布2(STACK型),然后调整整体位置就可以了。----⑤ 如何在FORM的受限触发子中提交保存数据

----在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDA

TE,DELETE等操作并想立即存盘时,就需要COMMIT WORK语句了。首先在服务器端建立D B_SQL_COMMIT这个过程(采用ORACLE7.3数据库),PROCEDURE DB_SQL_COMMIT IS source_cursor integer;ignore integer;V7 NUMBER :=2;BEGIN

source_cursor:=dbms_sql.open_cursor;dbms_sql.parse(source_cursor,'COMMIT WORK',V7);ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;----然后在FORM中该触发子中调用过程DB_SQL_COMMIT;就可以了,当然你可以根据自己

需要将该过程加入参数,这样通过参数可以得到执行DML语句的权限。----⑥ 如何在FORM中实现某数据项自动按记录序号加一操作

----设块名为VO,要操作的数据项为VO_ID,在该块中建立块级触发子WHEN-CREATE-REC

ORD,加入如下代码:

:VO_ID:=:System.Trigger_Record;----这样每当生成新记录时VO_ID就会自动加一了。

----⑦ 如何在一个FORM中调用另一个FORM,或在一个块中调用另一个块时显示特定的 记录有时用户会要求在调用另一个FORM时,只显示相关的记录,举例如下,在一个FORM 的块中有一个按钮,在按钮触发子中加入如下代码: DECLARE PM PARAMLIST;BEGIN

PM:=GET_PARAMETER_LIST('PM');IF NOT ID_NULL(PM)THEN

DESTROY_PARAMETER_LIST('PM');END IF;PM:=CREATE_PARAMETER_LIST('PM');......................ADD_PARAMETER(PM,'THE_WHERE', TEXT_PARAMETER,'EM_NAME=''EM4'' AND EM_PROJECT_NAME=''支架预制''');OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);END;

----其中EM_NAME,EM_PROJECT_NAME为本FORM某块的数据项,PAYMENT为要调用的FORM 模块。这样通过传递参数列表就可以得到想要的结果。在FORM PAYMENT.FMB中,建立一 参数THE_WHERE,CHAR型,长1000,然后在PAYMENT.FMB中建立FORM级触发子WHEN-NEW-F ORM-INSTANCE,在该触发子中加入以下语句:

IF :PARAMETER.THE_WHERE IS NOT NULL THEN SET_BLOCK_PROPERTY('PAYMENT', DEFAULT_WHERE,:PARAMETER.THE_WHERE);END IF;----其中PAYMENT为要显示的块,这样通过参数传递就得到想要的某些特定条件的数据 了。

----⑧ 在FORM中当有主从块时,连续输入记录如何避免被不断的提示保存:

----每输入一条主记录和若干条该主记录的从记录后,此时再导航到主块输下一条记录,FORM就会提示你是否要保存记录,而你并不希望FORM提示,让它自动保存,此时你可 以到Program Units中找到过程PROCEDURE Clear_All_Master_Details,然后在这个过程 中找到语句

Clear_Block(ASK_COMMIT);----将其改为Clear_Block(DO_COMMIT);就可以了。----⑨ 在Report开始时选择排序项:

----在报表开始的Parameter Form中选择报表按哪个数据项排序,----1.先在USER PARAMETER 中创建SORT参数,为字符型,长20。

----2.初始值选’责任方’,然后将这四个值输入到DATA SELECTION中,形成列表。----3.然后处理QUERY中的SQL语句: select CHARGER,FCO_NO,EM_NAME,FCO _NO,DESCRIPTION, FCR_POINT from FCR_MAIN ORDER BY DECODE(:SORT,'责任方',CHARGER,'FCO号', FCO_NO,'FCR号',FCR_NO,'FCR号',EM_NAME)----⑩ 在Developer 2000中如何读写操作系统文件

----在用Developer 2000的开发工具开发应用程序时,经常碰到需要读写外部文件的问

题,可以用ORACLE 带的包TEXT_IO来完成这项需求。例如: DECLARE

IN_FILE TEXT_IO.FILE_TYPE;OUT_FILE TEXT_IO.FILE_TYPE;LINE_BUFER VARCHAR2(80);/*若不用IN_FILE,可以将各字段联接在一起赋值给此变量*/

BEGIN

IN_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST1.TXT’,’r’);OUT_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST2.TXT’,’w+’);

LOOP

TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);TEXT_IO.PUT(LINE_BUFER);TEXT_IO.NEW_LINE;TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);END LOOP;EXCEPTION

WHEN no_data_found THEN

TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;----三.数据库管理

----① 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TAB

LE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DR OP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。----② 数据库文件的移动方法

----当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):

----1.使用SERVER MANAGER关闭实例.SVRMGR > connect internal;SVRMGR > shutdown;SVRMGR >exit;----2.使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6).在UNIX中用 mv命令可以把文件移动到新的位置,#mv /ora13/orarun/document.dbf /ora12/orarun----3.装载数据库并用alter database命令来改变数据库中的文件名.SVRMGR > connect internal;SVRMGR > startup mount RUN73;SVRMGR > alter database rename file

> ‘/ ora13/orarun/document.dbf’

> ‘/ ora12/orarun/document.dbf’;----4.启动实例.SVRMGR > alter database open;----ORACLE数据库开发经验总结

第三篇:Oracle数据库学习总结

Oracle数据库学习总结

1.set linesize xx;设置行间距,常用数值有100,200,300

2.set pagesize xx;设置每页显示行数

3.ed x;表示新建一个x.sql文件,通过文件编辑SQL语句,然后用@x命令可以调用刚才的命令

4.CONN username/password;命令可以建立用户的连接,需要注意的是sys用户是超级管理员,连接是时需要在末尾加上AS SYSDBA 以系统管理员的身份进行连接

5.如果表是归某个用户特有的,在查询的时候需要加上用户名 即以 用户名.表名 的格式查询

6.SHOW USER;命令可以显示当前连接的用户名

7.SELECT * FROM tab;可以显示当前用户下的所有数据表

8.“ / ”表示重复执行上一次的SQL命令操作

9.SELECT xx别名,xx 别名 FROM xx;搜索指定列名,并指定别名,方便显示

10.关键字DISTINCT 可以消除重复值 如 SELECT DISTINCT xx FROM xx;

11.Oracle中提供的字符串连接操作,使用“||”表示,相当于Java的“+”普通字符用“ ' ” 括起来

如: SELECT'员工姓名是'||ename||'员工卡号是'||empnoFROM emp;

12.查询语句 BETWEEN xx AND xx 是包括边界的13.查询日期的时候要加上''把日期引起来

例如:SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-81' AND '08-9月-81';

14.模糊查询中“%”可以匹配任意长度的内容,“_”可以匹配一个长度的内容,如果没输入模糊查询关键字,那么默认查询全部数据,like关键字可以用在任何地方,可以匹配数字、字符、日期等。

15.SQL中不等于可以用“<>”或者“!=”表示

16.ORDER BY语句中 ASC表示升序,DESC表示降序,在没指定的时候默认按照升序排序

17.Oracle中的单行函数有如下,默认的所有的函数都要到表中执行,加上关键字DUAL只会产生一个临时表

UPPER('xxx')将小写转换为大写

LOWER('xxx')将大写转换为小写

INITCAP('xxx')将首字母大写

CONCAT('','')字符串连接

SUBSTR('xxx',x,x)字符串截取,从0或1开始截取效果是一样的,因为Oracle比较智能,要是输入的参数为负数,则表示倒着截取

LENGTH('xxx')字符串长度

REPLACE('xxx','x','x')字符串替换

ROUND(xxx,xx)四舍五入 xxx需要四舍五入的数值,xx保留的小数位,可以加负数 TRUNC(xxx)截断操作,默认小数点后的全部截断,也可以指定小数点保留位数如TRUNC(789.536,2)得到的结果是789.53,也可以加负数如TRUNC(789.536,-2)结果是700

18.SELECT sysdate FROM DUAL;可以求出当前的日期

19.Oracle 中提供了以下日期函数支持:

MONTHS_BETWEEN()求出给定日期范围的月数

ADD_MONTHS(xxx,xxx)在指定日期加上指定的月数

NEXT_DATE(xxx,'')求出下一个给定日期数

TO_CHAR()可以将年、月、日进行分割

例如

TO_CHAR(hirdate,'yyyy')year,TO_CHAR(hirdate,'mm')months,TO_CHAR(hirdate,'dd')day 还可以对时间进行格式化输出 如TO_CHAR(hirdate,'yyyy-mm-dd')

TO_CHAR(hirdate,'fmyyyy-mm-dd')可以去掉前导0

TO_CHAR()还可以对数字进行格式化 如

SELECT ename,TO_CHAR(SAL,'99,999')FROM emp;

注意:一定要用9来表示

$表示美元符号,L表示Local的缩写,以本地语言进行金额显示

TO_NUMBER()将字符串变为数字

TO_DATE()将字符串变为Date类型 例如 SELECT TO_DATE('2009-12-8','yyyy-mm-dd')FROM dual;

TO_NVL()可以将NULL的内容变为指定的内容

DECODE()相当于Java的if else else语句

例如SELECT DECODE(1,1,'内容是1',2,'内容是2',3,'内容是3')FROM dual;将输入 内容是1

20.左右连接

SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE

e.deptno(+)=d.deptno;此例中是右连接,以deptno表为准。

21.SQL1999语法

CROSS JOIN 交叉连接 会产生笛卡尔积

NATURAL JOIN 自然连接 自动进行关联字段匹配 可以消除笛卡尔积

USING 子句:直接关联操作列 如 SELECT * FROM emp e JOIN dept USING(deptno)WHERE deptno=30;

ON 子句 用户自己编写连接条件

LETF JOIN/RIGHT JOIN 左右连接

SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e right OUTER JOIN dept d ON(e.deptno=d.deptno);

22.分组查询GROUP BY 放在where之后

常见的组函数有

COUNT();

MAX();

MIN();

AVG();

SUM();

用法如下:SELECT deptno,count(empno)FROM emp GROUP BY deptno;

语法:SELECT deptno,empno,count(empno)FROM emp GROUP BY deptno;是错误的,原因是使用分组函数的时候,不能出现分组函数和分组条件以外的字段。

语法:SELECT deptno,count(empno)FROM emp;是错误的,原因是不使用分组的时候,则只能单独使用分组函数

分组函数只能在分组中使用,不允许子啊where语句中个使用,要使用个分组条件可以加上HAVING

例如:SELECT deptno,avg(sal)FROM emp GROUP BY deptno having avg(sal)>2000;注意:分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句

如下语法是错误的:SELECT deptno,max(avg(sal))FROM emp GROUP BY deptno;不能出现deptno

如下语法是正确的:SELECT max(avg(sal))FROM emp GROUP BY deptno;

23.子查询中

>ANY 比里面的最小值大

=ANY 与IN用法相同

>ALL 比里面的最大值大

24.表复制

CREATE TABLE myemp AS SELECT * FROM emp;既复制表结构,又复制表内容

CREATE TABLE myemp AS SELECT * FROM emp where 1=2;后面的条件不可能成立,只复制表结构

25.Oracle 中常用的数据类型

VARCHAR、VARCHAR2 代表一个字符串,有长度限制,为255

NUMBER 分为两种

1)NUMBER(n)代表一个整数,数字的长度是n,可以使用INT

2)NUMBER(m,n)代表一个小数,小数长度为n,整数长度为m-n,可以使用FLOAT

DATE 代表日期的类型,日期要按照标准的日期格式进行存放

CLOB 大对象,表示大文本数据,一般可以存放4G的文本

BLOB 大对象,表示二进制数据最大可以存放4G,例如存放歌曲、电影、图片

26.表的创建

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

27.插入数据

INSERT INTO person(pid,name,birthdate,age)VALUES('222','里斯

',TO_DATE('1989-02-09','yyyy-mm-dd'),45);

28.更改表中数据

增加表结构:ALTER TABLE person ADD(address VARCHAR2(50)DEFAULT '暂无地址');

修改已存在的列:ALTER TABLE person MODIFY(name VARCHAR2(40)DEFAULT '无名氏');

29.表的重命名(只能在Oracle中使用)

RENAME XXX TO XXX;

30.约束(主要分为5类)

1)主键约束 主键表示是一个唯一的标识。本身不能为空

2)唯一约束 在一个表中只允许建立一个主键约束,而其他列如果不希望重复值的话,则可以使用唯一约束

3)检查约束 检出一个列的内容是否合法

4)非空约束

5)外键约束 在两张表中进行约束的操作 删除时应该先删除子表,再删除父表 创建主键:

语法1

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

语法2:

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_id PRIMARY KEY(pid));

创建非空约束

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

创建唯一约束

语法一

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)UNIQUE NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

语法二

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_name UNIQUE(name),);

创建检查约束

语法一

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL CHECK(age BETWEEN 0 AND 150),sex VARCHAR2(2)DEFAULT '男' CHECK(sex IN('男','女','中')),);

语法二

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男' ,CONSTRAINT p_age CHECK(age BETWEEN 0 AND 150),CONSTRAINT p_sex CHECK(sex IN('男','女','中')));

创建外键约束

--person表

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

--book表

CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid));

对于删除,应该先删除book表再删除person表

也可以使用级联删除,强制删除某张表

DROP TABLE person CASCADE CONSTRAINT;

设置外键约束级联删除

--person表

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

--book表

CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)ON DELETE CASCADE);

31.修改约束

如果一张表已经建立完成之后,则可以为其添加约束

ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段);

关于约束名称的命名最好要统一:

PRIMARY KEY :主键字段_PK

UNIQUE:字段_UK

CHECK:字段_CK

FOREIGH KEY:父字段_子字段_FK

例如:

DROP TABLE person;

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

ALTER TABLE person ADD CONSTRAINT pid_PK PRIMARY KEY(pid);

ALTER TABLE person ADD CONSTRAINT name_UK UNIQUE(name);

ALTER TABLE person ADD CONSTRAINT age_CK CHECK(age BETWEEN 1 AND 150);CREATE TABLE book(bid NUMBER ,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18));

ALTER TABLE book ADD CONSTRAINT book_PK PRIMARY KEY(bid);

ALTER TABLE book ADD CONSTRAINT pid_FK FOREIGN KEY(pid)REFERENCES person(pid);删除约束

ALTER TABLE person DROP CONSTRAINT name_UK;

ALTER TABLE person DROP CONSTRAINT age_CK;

第四篇:ORACLE数据库学习总结

数据库学习总结-Marlon

目录一、二、三、四、五、六、七、八、ORACLE_简介.............................................................................................................................................................1 ORACLE_简单查询.....................................................................................................................................................3 ORACLE标量函数和算数运算..................................................................................................................................5 ORACLE_多表查询.....................................................................................................................................................9 ORACLE_列函数和分组...........................................................................................................................................10 ORACLE_子查询.......................................................................................................................................................12 ORACLE_表的更新操作...........................................................................................................................................13 ORACLE_表与视图的管理.......................................................................................................................................15

一、ORACLE_简介

 Oralce数据库发展 Oracle 8

Oracle 8i:i表示internet,标识着Oracle公司正式进军互联网。Oracle9i Oracle10g:g表示grid,即网络技术。Oracle11g

 Oracle体系结构一 物理结构: 文件系统 控制文件 数据文件 日志文件

参数文件(不是数据库的组成成分)

 Oracel体系结构三 逻辑结构: block 快 extent 盘区 segment 段

tablespace 表空间 datafile 数据文件  SQL * Plus下的常用命令

 连接到SQL*PLUS sqlplus user/password[as sysdaba|sysoper] sqlplus/nolog

 启动数据库

startup mount 启动实例,打开控制文件,但不打开数据文件 startup nomount 只启动实例

 关闭数据库

shutdown immediate

 迫使每个用户执行为当前的SQL语句,立即断开连接 shutdown transactional

 迫使用户执行完当前事务时,断开连接 shutdown abort 强制关闭数据库

 常用SQL命令

show user:查看当前连接的用户

connect scott/tiger: 采用scott的用户名/tiger的密码连接数据库 desc table_name:查看tableName表结构 quit|exit:退出

disconnect:断开连接

clear screen:清屏,相当于Windows下的cls命令 select * from tab:列出当前用户下的所有表 @pata 执行pata制定的脚本文件

 Oracle常用基本数据类型 varchar2/varchar:变成字符串 char:定长字符串 Integer:整型

number(m,n):数字型 smallint:短整型 float:浮点数

decimal:十进制数字(小数)date:日期型

二、ORACLE_简单查询

 SQL结构化查询语言(Structured Query Language)

 SQL分类

1.数据定义语言(Data Definition Language,DDL):create、alter、drop。

create table 表名;alter table add 新列名 数据类型;drop table 表名;2.数据操纵语言(Data Manipulation Language,DML):insert、update、delete、select。Insert into 表名(字段1,字段2…)values(值1,值2…);update student set sage=22 where sno='200215';(将学生200215的年龄改为22岁)select distinct job from emp;去除重复行

3.数据控制语言(Data Control Language,DCL):commit work、rollback work。 查询雇员的所有信息 select * from emp; *表示所有列

 查询语句的格式

select *|列名 from 表名

 查询雇员的编号,姓名,工资

select * from empno,ename,sal from emp;

 查询所有职位 select job from emp;select distinct job from emp;distinct: 有区别的(去除重复行)

 查询工资大于1500的雇员信息,列出编号,用户名,工资 select empno,ename,sal from emp where sal>1500;

 带有where条件查询语句的基本格式 select *|列名 from 表名 where 条件;

 比较运算符 大于:> 小于:< 等于:= 大于等于:>= 小于等于:<= 不等于:!=或者<>

 限定查询 is null 和 is not null 的使用  查询每月可以得到奖金的雇员

select empno,ename,comm from emp where comm is not null;

select empno,ename,comm from emp where comm is not null and comm>0; 查询谁没有奖金

select empno,ename from emp where comm is null;

 限定查询 and 的使用

 查询工资大于1500,并且可以领取奖金的雇员

SQL> select empno,ename,sal,comm from emp where comm is not null and sal>1500;

 限定查询 or 的使用

 查询工资大于1500和可以领取奖金的雇员

select empno,ename,sal,comm from emp where sal>1500 or comm is not null; 查询没有奖金的雇员

select empno,ename,comm from emp where comm=0 or comm is null;

 限定查询 使用not对条件整体取反

 查询工资不大于1500并且不能领取奖金的雇员

select empno,ename,sal,comm from emp where sal<=1500 and(comm is null or comm=0);select empno,ename,sal,comm from emp where not(sal>1500 or comm is not null);

 限定查询 between...and...的使用

 查询基本工资大于等于1500并且小于等于3000的雇员

select empno,ename,sal from emp where sal>=1500 and sal<=3000;select empno,ename,sal from emp where sal between 1500 and 3000; 查询1981年雇佣的所有员工

select empno,ename,hiredate from emp where hiredate between'1-1月 1981' and '31-12月 1981';注:日期格式 日-月 年,要匹配上

 限定查询 字符串的比较

 查询姓名是'SMITH'员工的所有信息 select * from emp where ename='SMITH';select * from emp where ename='smith';注:列值区分大小写

 限定查询 in的使用

 查询出编号7369,7499,7521的雇员的具体信息

select * from emp where empno=7369 or empno=7499 or empno=7521;select * from emp where empno in(7369,7499,7521);

 限定查询 not in的使用

 查询出雇员编号不是369,7499,7521的雇员的具体信息 select * from emp where empno not in(7369,7499,7521);

 限定查询 like的使用

 查询雇员的名字第二个字符是M的雇员信息 select * from emp where ename like'_M%';注:_匹配一个字符,%匹配0个多个字母(前缀或后缀的代表) 查询1982年入职的所有雇员的信息

select * from emp where hiredate like'%82'; 查询工资中包含5的雇员信息

select * from emp sal where like'%5%';

 对结果排序-Oracle By  查询员工工资大于1500员工的信息,按工资排序 select * from emp where sal>1500 order by sal; 查询工资大于1500员工的信息,按工资降序,按雇佣日期升序排序 select * from emp where sal>1500 order by sal desc,hiredate asc;注:ASC升序,DESC降序,默认ASC。

ascending [ə'sendiŋ]上升的,降序排列(descend [di'send] 的缩写);

三、ORACLE标量函数和算数运算

字符函数的使用

 转换为大写字母

select upper('smith')from dual;注:dual是公共表。upper ['?p?] 上面的,上部的

 转换为小写字母

select lower('SMITH')from dual;注:lower 放下

 每个单词的字母变成大写,其余字母小写 select initcap('hello world')from dual

 串连接(concat):可以使用“||”进行串连接 select concat('HELLO','WORLD')from dual;select 'HELLO'||'WORLD' from dual;

 求子串(SUBSTR)select substr(ename,1,3)from emp;注:含义为截取ename字段从第一个字符开始,总共三个字符

 求长度(LENGTH)select length(ename)from emp;

 串替换(REPLACE)select replace('HELLO WORLD','WOR','WEL')from dual;结果:

REPLACE('HE-----------HELLO WELLD 注:第一个逗号是原字符,第二个逗号是原字符的一部分,第三部分是替换原字符那个部分。

 要求显示所有雇员的姓名和姓名的后三个字符

select ename,substr(ename,length(ename)-2)from emp;select ename,substr(ename,-3)from emp;

 四舍五入(Round)select round(789.536)from dual;ROUND(789.536)--------------

790

 四舍五入(Round):指定保留小数位数 select round(789.536,2)from dual;----------------

789.54

 四舍五入(Round):对整数四舍五入 select round(789.536,-2)from dual;ROUND(789.536,-2)-----------------

800

 截断小数位(TRUNC)select trunc(789.536)from dual;TRUNC(789.536)--------------

789

 截断小数位(TRUNC):指定保留小数位 select trunc(789.536,2)from dual;TRUNC(789.536,2)----------------

789.53

 截断小数位(TRUNC):对整数截断 select trunc(789.536,-2)from dual;TRUNC(789.536,-2)-----------------

700  除空格(TRIM)

SQL> SELECT TRIM(55)FROM DUAL;TRIM(55)--------55  取余数(MOD)select mod(10,3)from dual;

 日期函数 运算规律:

日期+数字=日期 日期-数字=日期

日期-日期=数字(天数)

 查询当前日期

select sysdate from dual;SYSDATE-------------10-3月-12

 显示10部门员工进入公司的星期数

select empno,ename,round((sysdate-hiredate)/7)from emp where deptno=10;

 在指定日期上加入指定的月数之后的日期(ADD_MONTHS)select add_months(sysdate,4)from dual;ADD_MONTHS(SYS--------------10-7月-12

 求出给定日期范围的月数(months_between)select empno,ename,months_between(sysdate,hiredate)from emp;

 下一个给定的星期是那个日期(next_day)select next_day(sysdate,'星期一')from dual;注:表示在当前时间的前提下,下个礼拜一的具体日期

 求出给定日期所在月份的最后一天日期(last_day)select last_day(sysdate)from dual;

 转换成字符串(to_char)查询雇员号,姓名,以及入职的年份

select empno,ename,to_char(hiredate,'yyyy')from emp;注:yyyy匹配年份,mm匹配月份,dd匹配日

 使用to_char设置日期的显示格式

select empno,ename,to_char(hiredate,'yyyy-mm-dd')from emp;

 使用fm去掉前导0 select empno,ename,to_char(hiredate,'fmyyyy-mm-dd')from emp;EMPNO ENAME

TO_CHAR(HI--------------------------

7369 SMITH

1980-12-17

7499 ALLEN

1981-2-20 注:正常的值是1981-02-20,02前面的0去掉,变成了1981-2-20. 通过to_char设置数值的格式

select empno,ename,to_char(sal,'99,999')from emp;说明:9代表1位数字

EMPNO ENAME

TO_CHAR---------------------------

7369 SMITH

800

7499 ALLEN

1,600

7521 WARD

1,250 注:把sal的值分成两个部分,后三位为一个部分,前两位为一个部分,用逗号隔开。

 显示余额

select empno,ename,to_char(sal,'$99,999')from emp;说明:$代表美元

 转换成数字(to_number)select to_number('123')+to_number('123')from dual;TO_NUMBER('123')+TO_NUMBER('123')--

246

 转换成日期(to_date)select to_date('2009-07-31','yyyy-mm-dd')from dual;TO_DATE('2009---------------31-7月-09

 算数运算

 查询每个员工的年收入

select empno,ename,(sal+comm)*12 from emp;年收入=工资+奖金

 查询每个员工的年收入

select empno,ename,(sal+comm)*12 income from emp;

 查询每个员工的年收入

select empno,ename,(sal+NVL(comm,0))*12 income from emp;注:NVL(comm,0),当comm的值为null时,用0替换

ORACLE_多表查询

 格式:

select 列名1 别名1,......from 表名1,表名2,......where 条件 order by 列名

 查询员工的编号,姓名,部门编号,部门名称

select empno,ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno;

关联查询-为表命别名

 查询员工的编号,姓名,部门编号,部门名称

select empno,ename,e.deptno,dname from emp e,dept d where d.deptno=e.deptno;注:这里的e是emp的别名,d是dept的别名

关联查询-自连接

 查询出每个雇员的姓名、工作、雇员的直接上级领导的姓名

select e.empno,e.ename,e.job,m.ename mname from emp e,emp m where e.mgr=m.empno;注:mname是m.ename的别名

关联查询-多表关联

四、 查询出每个雇员的姓名,工作,雇员的直接上级领导,以及部门名称 select e.ename,e.job,m.ename,d.dname from emp e,dept d,emp m where e.mgr=m.empno and e.deptno=d.deptno;注:当查询的字段间的关系涉及到n个表时,则n个表之间关联。

左、右外连接

 查询员工编号,姓名,所在部门号,部门名称,将没有员工的部门也显示出来 select e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno;注:(+)在左边,表示右连接,会列出所有右表中出现但是没有在左表中出现的行。

 查询雇员的编号,姓名及其领导的编号,将没有领导的员工也列出来 select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr=m.empno(+);注:(+)在右边表示左连接,会列出左表中出现但没有在右表中出现的行。

 交叉连接(cross join):用来长生笛卡尔积 select * from emp cross join dept;

 自然连接(nutural join):自动进行关联字段的匹配 select * from emp natural join dept;

 using子句:直接指定操作关联列

select * from emp join dept using(deptno)

 on子句:用户自己编写连接条件

select * from emp join dept on emp.deptno=dept.deptno;

 left join:左外连接

 right join:右外连接

五、ORACLE_列函数和分组

 常用的列函数

sum(expression)求和 max(expression)求最大值 min(expression)求最小值 avg(expression)求平均数 count(expression)统计记录数

count(distinct colname)统计去除重复行记录数 nvl(comm,0)当comm为null时,用0替换

列函数的使用

 查询员工的记录数,员工工资的总和,平均工资,最高工资,最低工资

select count(*)count_emp,sum(sal)sum_sal, max(sal)max_sal,min(sal)min_sal, avg(sal)avg_sal from emp;

列函数的使用-对null的处理

 查询所有员工的年收入

select sum(sal+comm)from emp;SUM(SAL+COMM)-------------

7800 注:当comm为null时,sal+comm是没有结果值的

select sum(sal)+sum(comm)from emp;SUM(SAL)+SUM(COMM)------------------

31225

select sum(sal+nvl(comm,0))from emp;SUM(SAL+NVL(COMM,0))--------------------

31225

 分组查询

语法格式

select 列名...,列函数 from 表名...where 条件...group by 列名...order by 列名... 查询每个部门的人数

select deptno,count(*)from emp group by deptno;规则:如果在select字句中,有不在列函数中的列,则该列一定要出现在group by之后。

分组查询having字句的使用

 显示出平均工资大于2000的部门编号和平均工资 select deptno,avg(sal)from emp group by deptno having avg(sal)>2000;

SQL语句的书写顺序

select 列名,列函数 from 表名 where 条件 group by列名 having 条件 order by 列名

SQL语句的执行顺序

from where group by having select order by

 查询20,30部门的平均工资,并将平均工资大于2000的输出,输出结果按平均工资排序 select deptno,avg(sal)from emp where deptno in(20,30)group by deptno having avg(sal)>2000 order by avg(sal);

六、ORACLE_子查询

在where子句中使用子查询

 查询工资比7654雇员工资高的全部雇员信息

select * from emp where sal>(select sal from emp where empno=7654);子查询-in的使用

 查询和smith或jones在同一部门,同一职位工作的员工

select ename from emp where(deptno,job)in(select deptno,job from emp where ename in('SMITH','JONES'));

子查询-any的使用

 =any:与in操作符的效果一致

查询和smith或jones在同一部门,同一职位工作的员工

select ename from emp where(deptno,job)=any(select deptno,job from emp where ename in('SMITH','JONES'));

 >any:只要大于子查询中的任何一个值即可 select * from emp where sal>any(select min(sal)from emp group by deptno);

select empno from emp where sal

子查询all的使用

 >all:比最大的值大

select * from emp where sal>all

(select min(sal)from emp group by deptno);注:select min(sal)from emp group by deptno结果为

MIN(SAL)----------

950

800

1300 是每个部门当中的最少工资。

七、ORACLE_表的更新操作

 创建表副本

create table myemp as select * from emp;

 插入  到表中 insert的语法

insert into 表名(字段名1,字段名2,......)values(值1,值2......)

 为myemp中增加一条记录 insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7899,'张三','清洁工','7369','14-2月-2005',9000,300,40);注:给定的值要和指定的字段数一致。

1.如果全部字段都插入值的话,那字段名可以省略。即:

insert into 表名 values(值1,值2,.......);2.如果只是部分字段插入值的话,字段名又想省略的话,那么,其余没有数据插入的字段用null填补。

 to_date:字符型转换成日期型

 批量插入记录 格式:

insert into 表名

select 字段列表 from 表名 where 条件

注:insert表和select表列数等都一致 例如:

create table test as select * from emp;insert into test select * from emp;

 修改记录

update表名set要修改的字段=新值,要修改的字段=新值,...where条件

 将雇员号为7896的雇员的奖金修改为100 update myemp set comm=100 where empno=7896;注:执行修改操作时,一定要使用where来指定修改的条件,否则会改变表中的所有记录。

 删除记录

delete from 表名 where 条件

 删除雇员编号为7896的雇员信息 delete from myemp where empno=7896;注:执行delete操作时,一定要使用where来指定修改的条件,否则会删除表中所有的记录。

 Oralce的事务处理

commit:提交事务 rollback:回滚操作

注:操作一旦执行了commit操作,就再也不能回滚操作了。

八、ORACLE_表与视图的管理

 oracle中的常见数据类型

varchar、varchar2:表示一个字符串,有长度限制,为255 number:

number(n):表示一个整数,数字的长度是n,可以使用int number(n,m):表示一个小数,数字的长度为n,整数长度m-n,可以使用float date:表示日期类型,日期要按照标准格式日期存放。clob:大对象,表示大文本数据类型,可存放4G。

blob:大对象,表示二进制数据,最大可以存放4G,如电影,图片、歌曲

 创建表 语法:

create table 表名(字段名称1 字段类型[default 默认值], 字段名称1 字段类型[default 默认值],............字段名称1 字段类型[default 默认值],);

 复制表

create table 表名 as(子查询);注:当子查询不成立时,如果1=2,则只复制表的结果,不复制表的数据。

 删除表 语法:

drop table 表名;

 修改表结构

 增加一列

alter table 表名 add(列名称 列数据类型 default 默认值)

 删除列 alter table 表名 drop column 列名称;

 修改列的数据类型

alter table 表名称 modify(列的名称 列的类型 default 默认值);注:1.如果是更改数据的长度,则要求更改时,长度不能小于当前表中数据所具有的最大长度。

2.如果是更改数据类型,则要求更改时,该列的所有记录值都为空。

 修改表结构

 为表重命名

rename 旧表名 to 新表名;注:这是oracle特有的操作

 将myemp表改名为iemp SQL> rename myemp to iemp;表已重命名。 截断表

truncate table 表名;意义:清空表中的所有数据,并且立即释放资源,该操作是不可回滚。

 约束-约束的分类

主键约束:表示一个唯一的标识,本身不能为空 唯一约束:列值不允许重复

检查约束:检查一个列的内容是否合法

非空约束:不能为空值,如用户不能为空(no null)外键约束:在两张表中进行约束的操作

 主键约束(primary key)主键约束一般在id上使用,而且本身已经默认了不能为空,主键约束可以在建表的时候指定 create table person(pid varchar2(18)primary key, name varchar(30), age number(3), sex varchar2(2)default'男');

使用constraint指定

constraint [kən'streint] 约束;强制 create table person(pid varchar2(18), name varchar(30), age number(3), sex varchar2(2)default'男'

constraint person_pid_pk primary key(pid);); 非空约束(not null)create table person(pid varchar2(18)primary key, name varchar(30)not null, age number(3), sex varchar2(2)default'男');

 唯一约束(unique)create table person(pid varchar2(18)primary key, name varchar(30)unique not null, age number(3), sex varchar2(2)default'男');

 视图

概念:一个视图实质是封装了一条复杂的SQL语句

 创建视图 语法:

create view 视图名称 as 子查询

 创建部门20员工的雇员信息

create view empv20 as select * from emp where deptno=20;注:当创建视图以后,可以像操作表一样操作视图。注:视图的操作会影响到表的操作。

with check option 不能更新创建视图的条件 with read only 创建只读视图

 删除视图 语法:

drop view 视图名称

注:当删除视图所在的表时,则视图也不能被使用

 序列

创建序列语法:sequence ['si:kwəns] create sequence 序列名称;create sequence myseq;序列的操作:

nextval:取得序列的下一个内容 currval:取得当前序列的内容

 创建表验证序列的操作

create table testseq(next number,curr number);insert into testseq values(myseq.currval,myseq.nextval);

 创建序列指定每次增长的增量

create sequence myseq increment by 2;注:每次增长2

 创建序列指定开始的序列,默认的序列从1开始。create sequence myseq increment by 2 start with 10;注:序列从10开始,每次增长2

 创建一个序列1,3,5,7,9.create sequence myseq maxvalue 9 increment by 2 start with 1 cache 2 cycle;注:序列从1开始,每次增长2,最大值为9,循环两次。

第五篇:Oracle数据库实验报告

中南林业科技大学

实验报告

课程名称:

Oracle数据库 专业班级: 姓名:

学号:

****年**月**日

实验一

安装和使用Oracle数据库

【实验目的】

1.掌握Oracle软件安装过程,选择安装组件 2.掌握建立Oracle数据库,配置网络连接 3.掌握Oracle企业管理器的基本操作 4.使用SQL*Plus,登录到实例和数据库 5.掌握命令方式的关闭和启动实例及数据库 【实验内容】

1.查看已安装的Oracle组件

2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。

3.配置监听器,查看是否在服务中有LISTENER,是否能启动。4.配置本地net服务,提示:设置正确的服务器地址和端口号。5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。6.思考题:有几种打开SQL*Plus的方法?分别是什么? 7.用命令关闭实例和数据库,记录命令

8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。

【实验结论】

1.查看已安装的Oracle组件

2.查看服务,记录下和数据库有关的服务名,将他们设为手动方式,启动相关服务。

3.配置监听器,查看是否在服务中有LISTENER,是否能启动。

4.配置本地net服务,提示:设置正确的服务器地址和端口号。

5.打开SQL*Plus,用SYS和SYSTEM用户名和密码登录。

6.思考题:有几种打开SQL*Plus的方法?分别是什么?(1)直接打开 sql plus 即窗口方式(2)cmd 命令行方式

(3)WEB 页面中 iSQL*Plus 方式 7.用命令关闭实例和数据库,记录命令 SQL>shutdown immediate

8.用命令以NOMOUNT的方式启动实例,再加载数据库,打开数据库。

sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup

(1).用SQLplus 命令:show parameters参数名

(2).用select [列名] from 表名

2.初始化文件有几种?默认的保存位置在哪里?

初始化文件有三种:数据文件,日志文件,控制文件; 默认的保存位置E:oracleproduct10.2.0oradataorcl

4.打开OEM,查看三类物理文件信息

三类物理文件:数据文件、控制文件、日志文件 数据文件:.DBF存储表、索引及数据结构信息

日志文件:.LOG记录对数据库的所有修改信息,用于恢复

控制文件:.CTL二进制文件,记录数据库名、文件标识、检查点

5.分别用select命令查询V$parameter动态性能视图,用show命令查看全局数据库名、实例名、是否启动自动归档、标准数据块大小这四个参数的值,记录命令和结果。用select命令查询V$parameter动态性能视图

用show命令查看全局数据库名、实例名

用show命令查看是否启动自动归档、标准数据块大小

6.如何用命令查看数据文件、控制文件的文件名、存储位置和状态信息?

(1).查看数据文件的文件名、存储位置和状态信息

(2).查看控制文件的文件名、存储位置和状态信息

0

和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到mydb数据库。

2.用命令方式手工创建数据库testorcl

(1)创建批处理文件,建立必需的各级目录,参考第一题MYDB数据库的默认目录。

(4)运行数据库建立脚本,更改相关服务为手动启动方式

(5)运行数据字典等创建脚本

3.在DBCA中删除MYDB数据库。

Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog

二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名 2.设置行宽为160,每页行数为40 3.查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列

4.查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列

5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称

6.在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。

7.查询每个部门经理的员工编号、姓名、薪水、部门号。

【实验结论】

一、需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。

1.将hr.rar解压到D:oracleproduct10.2.0db_2demoschema human_resources目录下,然后在SQL*PLUS 中执行 hr_main.sql

二、完成下面的查询,记录查询命令和结果。1.查询HR方案种有哪些表,列出表名

5.查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称

738

实验五

PL/SQL编程

【实验目的】

1.熟悉PL/SQL的数据类型和书写规则 2.熟悉控制结构和游标的使用 3.编写和运行函数、过程和触发器 【实验内容】

编写脚本文件,调试运行脚本文件,并记录结果。

1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息 在DECLARE部分完成:

(2)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型(3)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(4)定义学生信息记录变量stu_record 在BEGIN…END部分完成:

(1)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’

性别:‘m’

籍贯:‘黑龙江省哈尔滨市’ 学习成绩:‘Excellent’

0

(1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型

set serveroutput on declare type stu_record_type is record

(s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)编写本地子过程:学生信息打印过程PrintStuRecord,把中定义的记录类型作为参数

procedure PrintStuRecord as begin dbms_output.put_line('学号:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性别:'|| stu_record.s_sex);dbms_output.put_line('籍贯:'|| stu_record.s_address);dbms_output.put_line('学习成绩:'|| stu_record.s_studyscore);dbms_output.put_line('活动成绩:'|| stu_record.s_activescore);end PrintStuRecord;(3)定义学生信息记录变量stu_record stu_record stu_record_type;在BEGIN…END部分完成:

(4)为stu_record变量的各个元素赋值如下: 学号:‘2001001’ 姓名:’李新’

性别:‘m’

籍贯:‘黑龙江省哈尔滨市’

2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中

(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float)

create table bookinfo(bookno varchar2(36)Primary key,4

Selectcount(bookno),count(distinct authorname)from bookinfo;end;/

(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化 <1>插入

647

实验六

模式对象管理与安全管理

【实验目的】

1.了解模式对象的类型

2.掌握在OEM中操作模式对象的方法

3.掌握命令方式建立表、视图、索引等常见对象的方法 4.熟悉Oracle中权限分类和设置,理解系统提供用户的角色和权限

5.熟练使用建立用户、角色,为用户授权、授予角色的命令

【实验内容】

1.创建一个TESTUSET用户,密码为test,默认表空间为user表空间

2.创建用户后为其授予登录数据库和创建数据库对象的权限 3.用TESTUSER用户登录数据库

4.创建学生信息表(学号,姓名,性别,入学成绩),定义主键和输入数据(至少5条数据),提交添加的数据。并完成下面的题目:

(1)再继续添加2条数据,设置一个保存点savepoint,再添加1条数据,执行回退到保存点的回退命令。查看此时表中数据(2)查询入学成绩大于480的学生信息(3)建立男生信息视图

(4)在“成绩”字段上建立B-树索引

5.创建一个表簇,名为empl_dep,容纳empl表和dep表,有公

下载Oracle数据库学习中的六条经验总结word格式文档
下载Oracle数据库学习中的六条经验总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    ORACLE数据库学习心得大全

    ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了 oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会......

    Oracle数据库总结范文

    创建表及命名规则? 表名和列名: 必须以字母开头 必须在1–30个字符之间 必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保......

    ORACLE数据库工作总结

    2014-2015学年度第一学期ORACLE教学工作总结 班级:13高软班 数据库技术是计算机科学技术中发展最快的领域之一,也是应用最为广泛的技术之一,它已经成为计算机信息系统与应用的......

    学习oracle数据库的总结(图文整理)(定稿)

    1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlp......

    Oracle数据库使用心得

    Oracle数据库使用心得 092909 谢弘毅 经过助教对oracle和sybase数据库的讲解后,我下载使用和体验了这两个数据库,但主要的还是使用了Oracle数据库,经过一段时间的使用,对其使用......

    Oracle数据库 知识点总结

    1.constraint约束: alter table [table_name] add constraint [pk_name] primary key(pkname);//添加主键 alter table [table_name] drop constraint [pk_name];//删除主键......

    Oracle数据库心得体会(含五篇)

    学习Oracle数据库的心得体会 对于学习Oracle数据库,应该先要了解Oracle的框架。它有物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成),逻辑结......

    oracle数据库自动备份方案

    1. 目的 编写本文档的目的为实现ORACLE数据库的自动备份,为不动产数据增加一份数据安全按保障。 2. 软件环境 数据库服务器:oracle 11g atabase x64 v11.2.0.4.0 客户端:Oracle......