当前位置: 首页 > 实用文 > 实习报告

oracle实习报告

作者:vila | 发布时间:2020-12-15 18:11:17 收藏本文 下载本文

第1篇:oracle实习报告

实验四数据更新与视图

一、实验目的1、掌握数据更新语句的使用;

2、掌握视图操作的基本方法和应用,理解基于视图的查询和数据更新操作的过程。

二、实验内容及其对应的SQL语句

1.在实验二创建的表中使用SQL语句完成以下操作:

(1)现有一供应商,代码为S

9、姓名为英特尔、所在城市西安,供应情况如下:供应零件P5给工程J7数量为600,供应零件P4给工程J4数量为500,请将此供应商的信息和供应信息插入数据库。

insert

into s(sno,sname,city)

values('s9','英特尔','西安');

insert

into spj(sno,pno,jno,qty)

values('s9','p5','j7',600);

insert

into spj(sno,pno,jno,qty)

values('s9','p4','j4',500);

commit;

(2)请将北京供应商的供应数量加20

update spj

set qty=qty+20

where sno in

(select sno

from s

where city='北京');

commit;

(3)零件P3已经停产,请将P3的相关信息从数据库中删除。

delete

from spj

where pno='p3';

delete

from p

where pno='p3';

commit;

(4)创建零件名为螺丝刀的供应情况的视图P_ls,包括供应商名(Sname),零件名(Pname),零件重量(Weight),工程项目代码(Jno),供应数量(QTY).create view P_1s

as

select sname,pname,weight,jno,qty

from s,p,spj

where pname='螺丝刀';

(5)在视图P_ls中查询供应数量为500的供应商姓名。

select sname

from p_1s

where qty=500;

(6)完成课本P127第5题的(8)-(11)小题和P128第11题。

8、update p

set color='蓝'

where color='红';

commit;

9、update spj

set sno='s3'

where sno in

(select sno

from spj

where sno='s5'and jno='j4'and pno='p6');

commit;

10、delete

from spj

where sno='s2';

delete

from s

where sno='s2';

commit;

11、insert

into spj(sno,jno,pno,qty)

values('s2','j6','p4',200);

commit;

2.在实验一创建的表中使用SQL语句完成以下操作:

(1)学生孙天要退学,请删除该学生的所有记录。

delete

from sc

where sno in

(select sno

from student

where sname='孙天');

delete

from student

where sname='孙天';

commit;

(2)将学号为09105103学生的所有课程成绩加10分。

update sc

set grade=grade+10

where sno='09105103';

commit;

(3)学校开了一门新课,课称号为056课程名为信息系统分析,请将此门课程的信息插入。

insert

into course(cno,cname)

values('056','信息系统分析');

commit;

(4)创建查询每个学生的修课学分的视图,要求列出学生学号及总学分。create view c_credit(sno,scredit)

as

select sno,sum(credit)

from course,sc

where course.cno=sc.cno

group by sno;

(5)在创建的视图中查询学生李丽所修的学分数。

select sname,scredit

from c_credit,student

where student.sno=c_credit.sno and sname='李丽';

三、实验中出现的问题

首先,在删除某一些数据时,如果其别另外的表所参照时,则需先删除在相 关表里的相关数据,然后再删除所需的删除的数据;其次,在多表查询时一定要先做连接,然后再作所需的查询,在查询中如有groupby子句和where子句时,一定是先where子句,然后才是group by子句;最后,在数据更新之后如要查看更新结果则一定要记着运行commit语句。

四、实验总结

通过此次实习,基本掌握了在数据库中更新数据的基本方法,包括插入数据、修改数据、删除数据,同时,还学会了在数据库中建立视图,以方便查询用户所需的一些特定的数据。通过实习,发现数据更新这一操作为管理数据库带来了很大的方便,所以,掌握数据库更新的SQL语句是我们学好数据库的最基本的操作,通过此次实习基本达到初步掌握数据库更新的SQL语句,希望在以后的学习中通过使用可以更好更深刻的理解和掌握数据库更新SQL语句。

第2篇:Oracle实验报告

Oracle数据库实验报告

实验一:Oracle 10g安装卸载及相关工具配置

一、实验目标:

安装Oracle 10g,了解OEM,通过DBCA安装数据库,通过DBCA删除数据库,sqldeveloper连接数据库,卸载oracle 10g。

二、实验学时数 2学时

三、实验步骤和内容:

1、安装Oracle10g(默认安装数据库)双击setup.exe,选择基本安装,安装目录D:盘,标准版,默认数据库orcl,口令bhbh。进入先决条件检查界面时:网络配置需求选项不用打勾,直接下一步,是。直到安装成功。

2、登陆和了解OEM 主要是已网页的形式来对数据库进行管理。

第1页 http://主机IP:1158/em 用户名:sys 口令:bhbh 身份:sysdba 或者

用户名:system 口令:bhbh 身份:normal

3、通过DBCA删除已安装的默认数据库orcl 程序->OracleOraDb10g_home1->配置和移植工具->Database Configuration Aistant->创建数据库->……

5、sqldeveloper连接数据库 打开sqldeveloper,新建连接 连接名:system_ora 用户名:system 口令:bhbh 主机名:本机计算机名 SID:xscj 测试,显示成功,连接,保存。

第2页

6、卸载oracle 10g Windows下

1>停止所有Oracle服务,点Universal Installer卸载

2>删除注册表中的所有关于Oracle项

在HKEY_LOCAL_MACHINESOFTWARE下,删除Oracle目录

3>删除硬盘上所有Oracle文件。(1)Oracle安装文件

(2)系统目录下,在Program files文件夹中的Oracle文件

四、上机作业

根据实验步骤完成逐个实验目标中的任务。

五、心得体会

通过这次的实验,我了解了oracle数据库的情况。懂得了数据库就是把数据存储在一个类似与仓库的地方,需要用时才从数据库里调出来。通过上机实践,知道了装数据库和卸载数据库,并且学会了怎样连数据库。

实验二:Oracle 10g手工建数据库

一、实验目标:

安装Oracle 10g数据库环境,手工建立数据库;通过Net Configuration Aistant建立监听,使用sqldeveloper连接数据库测试。

二、实验学时数 2学时

三、实验步骤和内容:

先安装好Oracle 10g数据库环境(不安装默认数据库)。1.创建好相关的目录

第3页 假设oracle安装在D盘,打开命令行,运行->cmd-> md D:oracleproduct10.2.0adminmydbpfile md D:oracleproduct10.2.0adminmydbbdump md D:oracleproduct10.2.0adminmydbcdump md D:oracleproduct10.2.0adminmydbudump md D:oracleproduct10.2.0oradatamydb md D:oracleproduct10.2.0flash_recovery_areamydb 2.创建数据库实例

(1)设置环境变量SID(注:以后每打开一次CMD都要运行此句)set ORACLE_SID=mydb(2)创建口令文件

orapwd file=D:oracleproduct10.2.0oradatamydbPWDmydb.ora Paword=bhbh entries=5(3)使用oradim命令创建数据库实例mydb oradim-new-sid mydb-startmode manual-pfile "D:oracleproduct10.2.adminmydbpfileinitmydb.ora" 3.用sys账户以sysdba的身份登录 输入sqlplus sys/bhbh as sysdba 4.创建实例初始化参数文件initmydb.ora,并将其放到D:oracleproduct10.2.adminmydbpfile路径下。

initmydb.ora # Copyright(c)1991, 2001, 2002 by Oracle Corporation

第4页 job_queue_procees=10 # Job Queues # Shared Server dispatchers="(PROTOCOL=TCP)(SERVICE=mydbXDB)" # Miscellaneous compatible=10.2.0.1.0 # Security and Auditing remote_login_pawordfile=EXCLUSIVE # Sort, Hash Joins, Bitmap Indexes pga_aggregate_target=25165824 sort_area_size=65536 # Database Identification db_domain="" db_name=mydb # File Configuration control_files=("D:oracleproduct10.2.0oradatamydbcontrol01.ctl", "D:oracleproduct10.2.0oradatamydbcontrol02.ctl","D:oracleproduct10.2.0oradatamydbcontrol03.ctl")db_recovery_file_dest=D:oracleproduct10.2.0flash_recovery_area db_recovery_file_dest_size=2147483648 # Pools

第5页 java_pool_size=50331648 large_pool_size=8388608 shared_pool_size=83886080 # Cursors and Library Cache open_cursors=300 # System Managed Undo and Rollback Segments undo_management=AUTO undo_tablespace=UNDOTBS1 # Diagnostics and Statistics background_dump_dest=D:oracleproduct10.2.0adminmydbbdump core_dump_dest=D:oracleproduct10.2.0adminmydbcdump user_dump_dest=D:oracleproduct10.2.0adminmydbudump # Procees and Seions procees=150 # Cache and I/O db_block_size=8192 db_cache_size=25165824 db_file_multiblock_read_count=16

5.运行命令实例初始化 STARTUP NOMOUNT

第6页 pfile="D:oracleproduct10.2.0adminmydbpfileinitmydb.ora";6.运行创建数据库SQL命令 CREATE DATABASE mydb MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 DATAFILE 'D:oracleproduct10.2.0oradatamydbsystem01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED SYSAUX DATAFILE 'D:oracleproduct10.2.0oradatamydbsysaux01.dbf' size 20M UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:oracleproduct10.2.0oradatamydbundotbs01.dbf' SIZE 150M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE TEMP1 TEMPFILE 'D:oracleproduct10.2.0oradatamydbtemp01.dbf' SIZE 100M REUSE CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE 'D:oracleproduct10.2.0oradatamydbredo01.log' SIZE 50M,第7页

'D:oracleproduct10.2.0oradatamydbredo02.log' SIZE 50M,'D:oracleproduct10.2.0oradatamydbredo03.log' SIZE 50M;7.创建用户表空间USERS CREATE TABLESPACE USERS DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' SIZE 128M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;8.创建数据字典(需要几分钟,报错不要紧)

@D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;9.创建内部包(需要几分钟,报错不要紧)

@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;10.创建自启动文件,以便以后不用每次打开数据库实例都要运行一次第5步。

create spfile FROM pfile='D:oracleproduct10.2.0adminmydbpfileinitmydb.ora';11.重启数据库,即关闭再打开。shutdown;connect sys/bhbh as sysdba;startup;12.授权用户system为dba,置密码为bhbh

第8页 grant dba to system identified by bhbh;13.使用system用户登录 conn system/bhbh;14.为system用户创建一张KC表 CREATE TABLE KC(KCH CHAR(3)NOT NULL, KCM CHAR(16)NOT NULL, KKXQ NUMBER(1)NOT NULL, XS NUMBER(2)NOT NULL, XF NUMBER(2), CONSTRAINT CH_KKXQ CHECK(kkxq between 1 and 8), CONSTRAINT "PK_KCH" PRIMARY KEY("KCH"))TABLESPACE USERS;15.给KC表插入一条数据,并提交。

INSERT INTO KC VALUES('001','数据库',7,68,4);commit;16.测试查询 Select * from kc;17.使用Net Configuration Aistant添加监听器,并重启监听器(运行cmd->netca也一样)。

第9页 18.创建Em资料档案库(这一步可以省略,只为创建OEM,我们以后学习用不到)。

cmd->emca-config dbcontrol db-repos create 19.打开SQLDeveloper,并新建数据库连接并测试是否成功。

20.若之前手工安装数据库出现差错,可使用以下命令删除数据库实例: cmd->oradim-delete-sid mydb 然后删除第1步所建目录即可。

四、上机作业

根据实验步骤完成逐个实验目标中的任务。

五、心得体会:

通过这次的实验,明白了手动建数据库,建表空间等。还知道了运行数据库的命令,授权命令插表等等。这次学习让我对数据库的了解和运用又新的体会。

实验三:数据库修改

一、实验目标:

学习简化实验二里的实验步骤,学习修改数据库某些属性,完成数据库作业1:手工快速创建数据库实例XSCJ和数据库XSCJ。

二、实验学时数 2学时

三、实验步骤和内容:

第10页 1.安装好ORACLE 10g,(不需要安装数据库)。

2.快速安装数据库实例mydb和数据库mydb需要3个文件:init.bat,initmydb.ora,ctreatedb.sql。

(1)双击运行init.bat文件;

(2)将initmydb.ora放到正确的路径下(参考实验二);(3)在sqlplus环境下运行ctreatedb.sql

3.了解startup nomount,startup mount和startup三种状态的使用情况的区别,即打开实例不装载数据库、打开实例装载数据库但不打开数据库和打开实例装载数据库同时打开数据库。

(1)运行P45页例子2-7修改数据库(提示:startup;)ALTER DATABASE mydb DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' RESIZE 200M;(2)运行P45页例子2-9删除数据库(提示:startup mount;)取消数据库的受限制状态:

alter system enable restricted seion;删除数据库: DROP DATABASE;(3)重建数据库

sys重新登录,运行ctreatedb.sql。

4.删除数据库实例mydb和数据库mydb。使用命令 oradim-delete-sid mydb 以及删除相关文件夹。

四、上机作业

第11页 适当地修改建库所用到的3个文件里的参数,手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts。

五、心得体会

这次学习,让我明白了怎样修改数据库某些属性,手工快速创建数据库实例XSCJ和数据库XSCJ。DROP DATABASE命令可以删除数据库…

实验四:表的创建、修改和删除 以及表数据的插入、修改和删除

一、实验目标:

学习表的创建、插入、修改和删除以及表数据的插入、修改和删除。

二、实验学时数 4学时

三、实验步骤和内容: 1.手工创建好数据库XSCJ。

2.为用户system创建3个表XSB、KCB和CJB(P66-67 例子3.7-3.9,create table用法,自己照书完成)。

CREATE TABLE XSB(XH char(6)NOT NULL PRIMARY KEY, XM char(8)NOT NULL, XB char(2)DEFAULT '1' NOT NULL,第12页

CSSJ date NOT NULL, ZY char(12)NULL, ZXF number(2)NULL, BZ varchar2(200)NULL)TABLESPACE myts;CREATE TABLE KCB(KCH char(3)NOT NULL PRIMARY KEY,KCM char(16)NOT NULL, KKXQ number(1)NULL, XS number(2)NULL, XF number(1)NOT NULL)TABLESPACE myts;CREATE TABLE CJB(XH CHAR(6)NOT NULL, KCH CHAR(3)NOT NULL, CJ NUMBER(2), XF NUMBER(1), PRIMARY KEY(XH,KCH))TABLESPACE myts;3.学习修改表结构(P70 例子3.11(1)-(3)alter table用法)。(1)在表XSB中增加两列:JXJ(奖学金等级)、党建SM(奖学金等级说明)。

第13页 ALTER TABLE XSB ADD(JXJ number(1), 党建SM varchar2(40)DEFAULT '奖金1000元');(2)在表XSB中修改名为党建SM的列的默认值。ALTER TABLE XSB MODIFY(党建SM DEFAULT '奖金800元');(3)在表XSB中删除名为JXJ和党建SM的列。ALTER TABLE XSB DROP COLUMN JXJ;ALTER TABLE XSB DROP COLUMN 党建SM;修改好可用命令:describe table_name;查看。4.删除表(P71 drop table用法)。DROP TABLE table_name;5.向XSCJ数据库的表XSB中插入一行(P75 例子3.12 insert用法)。INSERT INTO XSB(XH, XM, XB, CSSJ, ZY, ZXF)VALUES('101101', '王林', '男',TO_DATE('19900210','YYYYMMDD'), '计算机', 50);提交数据: Commit;

插入后可用命令:select * from table_name;查看。

第14页 6.学习删除表数据(P78 DELETE和TRUNCATE的用法)。将XSCJ数据库的XSB表中总学分小于50的行删除: DELETE FROM XSB WHERE ZXF

UPDATE XSB SET ZY='通信工程', BZ='转专业学习', XH='101241' WHERE XM= '罗林琳';

UPDATE XS

第15页 SET ZXF=ZXF+ 4, BZ= '提前修完《数据结构》,并获得学分'

插入后可用命令:select * from table_name where(条件);查看。9.将数据恢复到刚插入时的状态(即把修改过的表清空再插入)。10.了解一下同义词,知道同义词的作用(不作重点)。

四、上机作业

手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts后,为用户system创建3个表XSB、KCB和CJB,并插入所有数据。

五、心得体会

这次学习的表创建,删除和修改的学习使我对数据库的表的认识更进一步。通过这次的学习,学会对表的创建、修改、删除。创建表就是按格式写些代码;修改(UPDATE+表名+需修改的内容)和删除(DROP TABLE + 表名)就是使用指定的指令对表进行操作,使之完成想要的目的。

WHERE XM='李明';

实验五:数据库查询练习

一、实验目标:

学习数据库数据查询语句的基本方法以及视图的使用方法。

二、实验学时数

第16页 6学时

三、实验步骤和内容:

课本例子:4.5,4.6,4.8,4.9,4.12(2),4.14,4.15(2),4.16,4.17 4.18,4.19,4.28,4.29,4.37,4.39(1),(3),4.42,4.43,4.46

(一)学习和掌握课本查询语句的基本语法和使用方法,完成下面练习(*为必做,@为选做)。

*

1、查询所有计算机系学生的信息 。Select * from xsb;*

2、查询王同学所修的学号

Select kch from xsb where xm like '王%';*

3、查询出生于85和86年的女同学的学号和姓名。 Select xh,xm from xsb where cj between to_date('19900101','yyyymmdd')and to_date('19911231','yyyymmdd')and xb='女';*

4、查询学号为101104所选修的全部课程成绩。 Select cj from cjb where xh='101104';*

5、检索每个学生的姓名和年龄。

Select xm,to_char(sysdate,'yyyy')-to_char(cj,'yyyy')as 年龄 from xsb;*

6、在XS表中检索学生的姓名和出生年份,输出的列名为姓名和生年 Select xm,to_char(cj,'yyyy')as 出生时间 from xsb;*

7、在XS_KC表中,求选修课程206的学生的学号和得分,并将结果按分数降序排序。

第17页 Select xh,cj from cjb where kch=’206’ order by cj desc;*

8、把课程名为软件工程的成绩从学生选课数据表XS_KC中删除。 Delete from kcb where kcm=(select kch from kcb where kcm=‘软件工程’);*

9、把女同学的成绩提高10%。

Update cjb set cj=cj*1.1 where xh in(select xh from xsb where xb='女')and cj

10、如果学号为061106的学生的成绩少于90,则加上10分。 Update cjb set cj=cj+10 where xh=’061106’and cj

11、查询学号为061104的学生选修的课程号和课程名。

Select xh,xm from xsb where xh in(select xh from cjb where kcb=’061104’;

*

12、检索学习课程号为206的学生学号与姓名。 Select xm,xh from xsb where kch=’206’;*

13、检索‘李明’所选修的全部课程名称。

Select kcm from kch where xm=(select xm from xsb where xm=’李明’);*

14、查找每个同学的学号及选修课程的平均成绩情况。 Select xh,avg as 课程号平均成绩 from cjb;*

15、求选修了各课程的学生的人数。

Select count(distinct xh)as 选修课程总人数 from cjb;Select kch as课程号 ,count(xh)as 选修人数 group by kch;

第18页 *

16、查询平均成绩都在80分以上的学生学号及平均成绩。 Select xh,cj from cjb group by xh having avg(cj)>80;Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj);Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj)desc;*

17、查询至少有6人选修的课程号。

Select kch as 课程号 from cjb group by having count(*)>=6;*

18、检索选修课程号为101或102的学生学号,姓名和所在系

Select xh,xm,zy from kch=(select kch from kcb where kch=’101’and kch= ‘102’;

*

19、统计被学生选修的课程门数。 Select cjb 每个学生情况以及选修课程情况

Select * from xsb inner join cjb on xsb.xh=cjb.xh Select xsb.*,cjb.* from xsb,cjb where xsb.xh=cjb.xh *20、查询没有选修数据库的学生学号,姓名和专业名。

@

21、取出选修‘操作系统’课程的学生姓名。

@

22、检索至少选修课程“数据结构”和“计算机基础”的学生学号。 @

23、检索至少选修课程号为101和206的学生姓名。 @

24、列出学生所有可能的选课情况。 @

25、查询101号课程得最高分的学生的学号

@

26、‘计算机基础’课程得最高分的学生的姓名、性别、所在系。

第19页 @

27、将成绩最低的学生的成绩加上10分。 @

28、所有成绩都在70分以上的学生姓名及所在系。 @

29、列出选修课程超过3门的学生姓名及选修门数。 @30、至少选修了两门课及以上的学生的姓名和性别 @

31、检索至少有两名男生选修的课程名。

@

32、统计每门课程的学生选修人数(超过10人的课程才统计)。 @

33、计算机基础成绩比离散数学成绩好的学生

@

34、列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。

@

35、列出每个同学的学号及选修课程号,没有选修的同学也列出

(二)视图

1、创建一个名为zy_view的视图,该视图可以用来查看每个系名称和学生人

Create or replace view zy_view(专业,专业人数)as select zy,count(xh)from xsb group by zy;

2、创建一名为xs_view的视图,该视图可以用来查看每个学生的姓名、选修的课程名和成绩。查看视图。

Create or replace view xs_view(姓名,课程名,成绩)as select xm kcm cj from xsb,kcb,cjb where xsb.xh=cjb.xh and cjb.kch=kcb.kch;

3、创建一个名为kc_view的视图,该视图可以用来查看每门课的课程号,课程名,选修人数和平均成绩。

Create or replace view kc_view(课程号,课程名,选修人数,平均成绩)as select kcb.kch,kcm,count(xh),avg(cj)from cjb,kcb where cjb.kch=kcb.kch group by kcb.kch,kcm;

4、利用kc_view视图,查看平均成绩最高的课程名。

Select 课程名 from kc_view where平均成绩=(select max(平均成绩)from kc_view);

5、修改xs_view视图,将视图重定义为每个学生的姓名、选课门数和平均

第20页 成绩。

Create or replace view xs_view(姓名,选课门数,平均成绩)as select xm,count(kch),avg(cj)from cjb,xsb where xsb.xh=cjb.xh group by xsb.xh,xm;

6、删除zy_view视图。 Drop view zy_view;

四、上机作业

完成实验内容中的任务,并把语句记录在每道题的下面。

五、心得体会

这次学习,我知道了对表的内容的查询,修改的操作,并通过实践对这次操作命令进一步的熟悉,运用和掌握。还学会了怎么建立视图,视图是可以快速的查询多个表的不同的信息的图表,它使我们更方便。

实验六:索引和约束

一、实验目标:

(1)掌握索引的使用方法。

(2)掌握各种约束即数据完整性的实现方法。

二、实验学时数 2学时

三、实验步骤和内容: 1.关于索引

第21页 建立索引的最大好处是快速存取数据。

假设有10个学生,10门课,则成绩表会有100条记录,对于成绩表中某人某门课成绩的查找,最坏情况是逐行查找100次,即最后一行。而如果对成绩表中的学号和课程号创建索引,则最坏情况只需查找20次(先查找学号,再查找课程号)。

建立索引的原则:(1)先插数据再建索引。

(2)如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。

(3)建立索引的先后顺序会影响查询的性能。2.创建索引表空间 CREATE TABLESPACE INDX DATAFILE 'D:oracleproduct10.2.0oradataxscjindx01.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 1280K MINIMUM EXTENT 128K DEFAULT STORAGE(INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 4096 PCTINCREASE 0);2.创建索引

CREATE INDEX kc_name_idx ON KCB(KCM)TABLESPACE "INDX";3.维护索引

第22页 ALTER INDEX kc_name_idx

4.删除索引 DROP INDEX kc_idx;5.数据完整性

生活中有些数据除了数据类型和宽度,还必须要定义其他规则的,比如学生学号必须是唯一的,不能重复的;性别必须是男或女,成绩必须是0-100的范围等。因此必须使用一些方法对数据进行约束,才得以保持数据完整性。

6.约束

(1)建表同时添加约束: XSB表: 主键为学号。KCB表: 课程号为主键,开课学期默认值为1,且只能为1-8。CJB表

主键为学号和课程号,存在外键XH参照XSB表的XH,存在外键KCH参照KCB表的KCH。(2)建表后时添加约束 XSB表:

第23页 RENAME TO kc_idx;性别必须为“男”或者“女”。CJB表:

成绩必须>=0且

(1)建KCB表时添加约束,使课程号必须为三位0-9数字

(2)建XSB表时添加约束,使学号为101开头,后三位为0-9数字

四、上机作业

完成实验内容中的任务,并把语句记录在每道题的下面。

五、心得体会

通过这次的学习,我知道了索引的最大好处是快速存取数据。1:先插数据再建索引。2:如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。3:建立索引的先后顺序会影响查询的性能。这3条是建立索引的原则。

我还知道了可以增加约束,就是制约范围。

实验七:PL/SQL编程

一、实验目标:

(1)掌握变量、运算符以及控制语句的使用。(2)掌握系统函数和自定义函数的使用。

二、实验学时数 4学时

三、实验步骤和内容: SYS登录,先导入数据字典:

第24页 @D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;(1)定义变量

例子1:定义一个长度为10的变量count,其初始值为1,是varchar2类型。

count varchar2(10):= '1';例子2:在表XSB中包含XH列,为了声明一个变量my_xh与XH列具有相同的数据类型,声明时可使用点和%TYPE属性,格式如下:

my_xh XSB.XH%TYPE;例子3:可以使用%ROWTYPE属性声明描述表的行数据的记录。

如:声明一个记录名为cj_rec,它与CJB表具有相同的名称和数据类型,格式如下:

DECLARE cj_rec CJB%ROWTYPE;对于用户定义的记录,必须声明自己的域: DECLARE TYPE TimeRec IS RECORD(HH number(2),MM number(2));(2)程序块

例子6.6:查询总学分大于50的学生人数 set serveroutput on DECLARE v_num number(3);

第25页 BEGIN SELECT COUNT(*)INTO v_num

FROM xsb

WHERE zxf>50;

IF v_num0 THEN dbms_output.put_line('总学分>:50的人数为:'|| TO_CHAR(v_num));END IF;END;/ 例子6.9:求10的阶乘。DECLARE n number:=1;count1 number:=2;BEGIN LOOP

n:=n*count1;

count1:=count1+1;

IF count1>10 THEN

EXIT;END IF;

第26页 END LOOP;DBMS_OUTPUT.PUT_LINE(to_char(n));END;/(3)函数

系统函数:例子6.20、6.21、6.

22、6.

23、6.24 自定义函数:例子6.26、6.

27、6.28

如果李明同学的年龄大于20岁,则显示“李明同学年龄为X岁”,否则打印“李明同学不符合条件” set serveroutput on declare age number(2);begin select to_char(sysdate, 'yyyy')-to_char(cj, 'yyyy')into age from xsb where xm='李明';if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/

2.计算1+3+5+……+99的和,并显示结果。

declare s number:=0;i number:=1;begin loop

第27页 s:=s+i;i:=i+2;exit when i>99;end loop;dbms_output.put_line(to_char(s));end;/

3.编写一个函数f_age,可以在xs表中根据姓名求出某人的年龄。

create or replace function f_age(sname in char)return number as age number;begin select to_char(sysdate,'yyyy')-to_char(cj,'yyyy')into age from xsb where xm=sname;return(age);end;/

4.改写第1题的程序块,调用函数f_age来求年龄。 set serveroutput on;declare age number(2);begin age:=f_age('李明');if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/

第28页

四、上机作业

完成实验内容中的任务,并把语句记录在每道题的下面。

五、心得体会

通过这次的学习,学会了用sql语言编写简单的程序,定义和调用简单函数。在此基础上还巩固了sql语句查询的方法。在以后的学习中要多加理解,上机练习。

实验八:游标与存储过程

一、实验目标:

(1)掌握游标的使用方法。(2)掌握存储过程的使用方法。

二、实验学时数 6学时

三、实验步骤和内容: 游标 例子:

set serveroutput on DECLARE v_xh char(6);v_zxf number(2);CURSOR XS_CUR3

第29页 IS SELECT XH,ZXF FROM XSB WHERE ZYM='计算机';BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_zxf;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_zxf));FETCH XS_CUR3 INTO v_xh,v_zxf;END LOOP;CLOSE XS_CUR3;END;1.使用游标,将平均分大于75分的学生的学号、姓名、平均分逐行输出。

set serveroutput on DECLARE v_xh char(12);v_xm char(12);v_cj number(38);CURSOR XS_CUR3 IS SELECT CJB.XH,XSB.XM,avg(CJ)FROM XSB,CJB WHERE xsb.xh=cjb.xh group by CJB.XH,XSB.XM having avg(cj)>75;

第30页 BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_xm)||v_cj);FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;END LOOP;CLOSE XS_CUR3;END;存储过程 例子1:

CREATE OR REPLACE PROCEDURE update_info(xname in char)AS xf number;BEGIN SELECT ZXF INTO xf FROM XS WHERE XM=xname;IF XF>60 THEN UPDATE XSB SET BZ='三好学生' WHERE XM= xname;

第31页

END IF;IF XF

(1)EXECUTE update_info('李明');(2)begin update_info('李明');end;例子2: CREATE OR REPLACE PROCEDURE count_grade(zym in char,person_num out number)AS BEGIN

SELECT COUNT(XH)

INTO person_num

FROM XS WHERE ZYM=zym;END count_grade;

第32页 执行:

set serveroutput on DECLARE v_num number;BEGIN count_grade('计算机',v_num);dbms_output.put_line(v_num);END;/ 1.创建一个存储过程p_delete可以删除CJB表的信息。CREATE OR REPLACE PROCEDURE p_delete AS

BEGIN delete FROM CJB;END p_delete;执行

EXECUTE p_delete;

2.创建一个存储过程p_insert,可以给学生表添加一条记录。 CREATE OR REPLACE PROCEDURE p_insert(XH IN CHAR,XM IN CHAR,XB IN CHAR,CSSJ IN DATE,ZY IN CHAR,ZXF IN NUMBER,BZ IN CHAR)AS BEGIN insert into xsb values(XH,XM,XB,CSSJ,ZY,ZXF,BZ);END p_insert;执行:

execute p_insert('102222','罗','女',to_date('19860310','yyyymmdd'),'通信工程',50,'转专业学习');

第33页

3.创建一个存储过程p_count,输入参数为姓名,输出参数为选课门数,平均成绩。 CREATE OR REPLACE PROCEDURE p_count(XNO IN CHAR,K_COUNT OUT NUMBER,AVG_CJ OUT NUMBER)BEGIN SELECT count(kch),avg(cj)INTO K_COUNT,AVG_CJ FROM XSB,CJB WHERE XSB.XH=CJB.XH AND XSB.XH=XNO;END p_count;

set serveroutput on DECLARE v_num1 number;v_num2 number(4,2);BEGIN p_count('101104',v_num1,v_num2);dbms_output.put_line(v_num1||' '||v_num2);END;

四、上机作业

完成实验内容中的任务,并把语句记录在每道题的下面。

五、心得体会

通过这次学习,我知道了游标和存储过程,还知道了游标和存储过程的使用方法,并且掌握了它们的使用方法,为以后打下基础。

实验九:触发器、用户角色创建和逻辑备份

第34页

一、实验目标:

(1)掌握触发器的使用。

(2)掌握用户和角色的创建和使用。(3)掌握数据表的导入导出。

二、实验学时数 2学时

三、实验步骤和内容:

(一)触发器

例子1: 假设XSCJ数据库中增加一个新表XSB_HIS,表结构和表XSB相同,用来存放从XSB表中删除的记录。创建一个触发器,当XSB表被删除一行,把删除的记录写到日志表XSB_HIS中。

CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN INSERT INTO XSB_HIS(XH,XM, XB,CSSJ, ZY, ZXF,BZ)VALUES(:OLD.XH,:OLD.XM, :OLD.XB, :OLD.CSSJ, :OLD.ZY, :OLD.ZXF, :OLD.BZ);END;1.创建一个触发器,当XSB表删除一个人时,把这个人的选课信息也删掉。CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN

第35页 DELETE FROM CJB WHERE XH=:OLD.XH;END del_xs;

(二)用户和角色

1.创建一个用户tom,密码为cat。该用户角色为dba。使用该用户建表,插入数据。

CREATE USER tom identified by cat default tablespace users;grant dba to tom;导入table.sql和insert.sql drop user tom cascade;

(三)数据库逻辑备份 exp和imp的使用

(1)将XSB,KCB和CJB表导出成为DMP文件

(2)将XSB,KCB和CJB表删除

(3)将刚导出DMP文件导入恢复3个表

(1)将用户tom导出成为DMP文件

(2)将用户tom删除再重建

(3)将刚导出DMP文件导入恢复用户tom

四、上机作业

完成实验内容中的任务。

五、心得体会

第36页 通过这次实践,我明白了什么是触发器,并掌握的它的使用方法,还掌握了用户和角色的创建和使用。还学会了数据表的导入导出,使保存数据变的很容易。

第37页

第3篇: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).查看控制文件的文件名、存储位置和状态信息

和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目录,该数据库相关的各个目录等),登录到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,电话号码,部门编号,部门名称

-3738

实验五

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’

(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_addre 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_addre);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,-44

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

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

-4647

实验六

模式对象管理与安全管理

【实验目的】

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表,有公

第4篇:Oracle期末实习报告——VBOracle学生成绩管理系统

Oracle期末实习报告

——VB/Oracle学生成绩管理系统

实习学期:班级: 学号: 姓名: 指导老师:

2014—2015第一学期

一、项目概述

使用学生成绩管理系统数据库XSCJ作为后台数据库,以Microsoft Visual Basic 6.0为前台开发工具,开发一个数据库应用系统。本系统的功能包括学生信息的查询;学生信息的录入、修改和删除;学生成绩的录入和删除。

二、总体设计

2.1 XSCJ数据库设计

1、学生成绩管理数据库中包含四个表:学生信息表(XSB)、学生照片表(XSZP)、课程表(KCB)、成绩表(CJB);

2、创建学生课程成绩视图(XS_KC_CJ);

3、使用触发器实现删除学生对应成绩和照片(xs_delete);

4、使用完整性约束实现删除对应成绩记录;

5、使用存储过程实现更新成绩和总学分(CJ_Data)。

2.2 前台设计

1、主窗体,包含本系统所有功能的选择;

2、学生信息查询窗体;

3、学生信息管理窗体;

4、学生成绩录入窗体。

三、详细设计

3.1 XSCJ数据库详细设计

3.1.1 表格设计

学生信息表(XSB)

包含学号(XH)、姓名(XM)、性别(XB)、出生时间(CCSJ)、专业(ZY)、总学分(ZXF)、备注(BZ)等列。

学生照片表(XSZP)

包含学号(XH)、照片(ZP)等列。课程表(KCB)

包含课程号(KCH)、课程名(KCM)、开课学期(KKXQ)、学时(XS)、学分(XF)等列。

成绩表(CJB)

包含学号(XH)、课程号(KCH)、成绩(CJ)等列。

3.1.2 学生课程成绩视图设计

通过学号将学生表和成绩表联系起来,通过课程号将成绩和课程表联系起来,包含学号、姓名、专业、课程号和成绩等列,所有学生的选课情况都保存在视图中,即任意一个学号和任意一个课程号都在视图中有对应的一条记录,如果成绩表(CJB)存在对应的记录则在成绩视图中显示成绩,不存在则显示为NULL。

3.1.3 触发器设计

通过创建学生表(XSB)的DELETE触发器实现当删除学生记录时,同步删除成绩表(CJB)中该学生的成绩记录和照片表(XSZP)中的照片记录。3.1.4 完整性约束的设计

用参照完整性约束实现当删除课程记录后,同步删除成绩表(CJB)中所有学生的该课程的成绩记录。

3.1.5 储存过程的设计

创建存储过程CJ_Data,参数包含:学号(in_xh)、课程号(in_kch)和成绩(in_cj)。根据课程号查询该课程对应的学分,根据学号和课程号查询该成绩记录,删除原来成绩记录。如果成绩>=60,则该学生总学分(ZXF)减去该课程的学分,如果新成绩=-1(表示删除该成绩记录),则存储过程结束。增加成绩记录,如果成绩>=60,则该学生总学分(ZXF)加上该课程的学分。

3.2 前台详细设计

3.2.1 主窗体的设计

主窗体包含本系统所有功能的选择,其他的所有功能界面都将作为主窗体的子窗体,运行时直接在主窗体中显示。包含主要功能有:学生信息查询、学生信息管理、学生成绩录入。

3.2.2 学生信息查询窗体设计

可以满足简单查询的需要,什么条件都不输入则显示所有记录。可以输入条件进行简单的模糊查询,各个条件之间为与的关系。在查询的结果中,鼠标单击一行记录时,可以查看此学生的备注和照片。

3.2.3 学生信息管理窗体设计

通过输入学生学号后单机“查询”按钮可以在窗口中的各个控件中显示当前学生的具体信息。单击“更新”按钮可以对学生信息进行添加和修改。单击“删除”按钮可以删除相应的学生记录。当删除一条学生记录时,触发器XS_DELETE会自动到CJB中删除此学生的成绩记录,并到XSZP表中删除此学生的照片记录,以保证数据的参照性完整。

3.2.4 学生成绩录入窗体设计

用户选择课程名和专业后,单击“查询”按钮,下方的表格中会从视图XS_KC_CJ中列出与课程名和专业都对应的学生的学号、姓名、课程号和所选课程的成绩。如果未选该课程则成绩为空。当移动表格中的记录集时,学号、姓名和成绩文本框中将列出对应的数据。在成绩文本框中输入新成绩或修改旧成绩,单击“更新”按钮则调用存储过程CJ_Data向CJB表中插入一行新成绩或修改原来的成绩。单击“删除”按钮则调用储存过程CJ_Data删除CJB表对应的一行成绩记录。

四、功能实现

4.1 XSCJ数据库功能实现

4.1.1 创建表空间

CREATE TABLESPACE STUDENT LOGGING DATAFILE 'D:apptaooradataXSCJSTUDENT01.DBF' SIZE 100M;

4.1.2 创建表

学生表(XSB)

CREATE TABLE XSB(XH char(6)

XM char(8)

XB char(2)NOT NULL PRIMARY KEY, NOT NULL, DEFAULT '1' NOT NULL, CSSJ date NOT NULL, NULL, NULL,NULL ZY char(12)

ZXF number(2)BZ varchar2(200));课程表(KCB)

CREATE TABLE KCB(NOT NULL PRIMARY KEY, NOT NULL,NULL, NULL, NOT NULL KCH char(3)

KCM char(16)

KKXQ XS

XF);number(1)number(2)number(1)

成绩表(CJB)

CREATE TABLE CJB(XH char(6)NOT NULL, KCH char(3)NOT NULL, CJ number(2)NULL, PRIMARY KEY(XH, KCH));学生照片表(XSZP)

CREATE TABLE XSZP(XH char(6)NOT NULL PRIMARY KEY, ZP blob NULL);4.1.3 插入样本数据

数据为课本后学生信息数据。

4.1.4 创建视图XS_KC_CJ CREATE VIEW XS_KC_CJ AS SELECT XSB.XH,XSB.XM, XSB.ZY, KCB.KCH,KCB.KCM,CJB.CJ FROM XSB CROSS JOIN KCB LEFT OUTER JOIN CJB ON CJB.XH=XSB.XH AND CJB.KCH=KCB.KCH;4.1.5 创建触发器

CREATE OR REPLACE TRIGGER xs_delete AFTER DELETE ON XSB FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN DELETE FROM CJB WHERE XH=:OLD.XH;DELETE FROM XSZP WHERE XH=:OLD.XH;COMMIT;END;

/*声明自治事务*/ 4.1.6 创建存储过程CJ_Data CREATE OR REPLACE PROCEDURE CJ_Data(in_xh IN char, in_kch IN char, in_cj IN number)AS in_count number;in_xf number:=0;in_cjb_cj number:=0;BEGIN SELECT XF INTO in_xf FROM KCB WHERE KCH=in_kch;SELECT COUNT(*)INTO in_count FROM CJB WHERE XH=in_xh AND KCH=in_kch;IF in_count>0 THEN

SELECT CJ INTO in_cjb_cj FROM CJB WHERE XH=in_xh AND KCH=in_kch;DELETE FROM CJB WHERE XH=in_xh AND KCH=in_kch;IF in_cjb_cj>=60 THEN UPDATE XSB SET ZXF=ZXF-in_xf WHERE XH=in_xh;END IF;END IF;IF in_cj-1 THEN

INSERT INTO CJB VALUES(in_xh, in_kch, in_cj);IF in_cj>=60 THEN UPDATE XSB SET ZXF=ZXF + in_xf WHERE XH=in_xh;END IF;END IF;COMMIT;END;4.1.7 创建完整性约束

ALTER TABLE CJB ADD CONSTRAINT FK_KC FOREIGN KEY(KCH)REFERENCES KCB(KCH)ON DELETE CASCADE;4.2 前台功能实现

4.2.1 主窗体实现

代码:

Private Sub search_Click()stu_query.Show stu_query.ZOrder 0 End Sub Private Sub manage_Click()stu_manage.Show stu_manage.ZOrder 0 End Sub Private Sub insert_Click()cj_insert.Show cj_insert.ZOrder 0 End Sub 页面设计:

功能:

主窗体包含其他三个功能窗体,可以切换学生信息查询、学生信息管理、学生成绩录入功能子窗体

4.2.2 学生信息查询窗体

页面设计:

功能展示:

可以满足简单查询的需要,什么条件都不输入则显示所有记录。可以输入条件进行简单的模糊查询,各个条件之间为与的关系。在查询的结果中,鼠标单击一行记录时,可以查看此学生的备注和照片。

当查询学号为101101的学生时,展示该学生的各种信息。

4.2.3 学生信息管理窗体

页面设计:

功能展示:

通过输入学生学号后单机“查询”按钮可以在窗口中的各个控件中显示当前学生的具体信息。单击“更新”按钮可以对学生信息进行添加和修改。单击“删除”按钮可以删除相应的学生记录。当删除一条学生记录时,触发器XS_DELETE会自动到CJB中删除此学生的成绩记录,并到XSZP表中删除此学生的照片记录,以保证数据的参照性完整。

先查询到学号为101101的学生信息,然后载入图片,点击更新后数据库的信息就随之更新了。

4.2.4 学生成绩录入窗体

页面设计:

功能展示: 用户选择课程名和专业后,单击“查询”按钮,下方的表格中会从视图XS_KC_CJ中列出与课程名和专业都对应的学生的学号、姓名、课程号和所选课程的成绩。如果未选该课程则成绩为空。当移动表格中的记录集时,学号、姓名和成绩文本框中将列出对应的数据。在成绩文本框中输入新成绩或修改旧成绩,单击“更新”按钮则调用存储过程CJ_Data向CJB表中插入一行新成绩或修改原来的成绩。单击“删除”按钮则调用储存过程CJ_Data删除CJB表对应的一行成绩记录。

查询到学号为10110

1、课程名为离散数学的学生成绩,在成绩文本框更改成绩,点击更新后数据库里的成绩就随之更改了,相应的总学分也会通过储存过程更改。

五、小结与体会

这次实习让我收获非常大。在oracle数据库方面,我又复习巩固了数据库创建、表格创建、视图、触发器、储存过程、完整性约束等方面知识。而且更加深刻认识到这些知识在实际应用中的作用。在前台方面,第一次使用VB 6.0写前台程序,虽然具体设计和代码大多都是参考书上的讲解,但是,我还是学会了很多东西,特别是前台设计的思路。

在实习过程中我也遇到过很多问题。比如,在刚开始使用VB 6.0时,我一直无法实现和数据库关联。我明明是按照书上的代码来操作的,但是还是实现不了相应的功能。后来我通过上网查资料、和同学探讨等方式,终于明白原来是机房的电脑配置中出了点问题。在修改过一个配置文件后,我终于能让前台和数据库链接上了,仅这一个问题就花费了我一上午的时间,但是能够顺利解决让我感到非常兴奋。我觉得实习的意义就在于在犯错和解决错误的过程中成长。这种通过上网查资料、和小伙伴讨论的过程,也是提升自我学习能力的途径。所以,虽然过程比较艰辛,但是还是蛮开心的。

最后,我感觉在我完成的这个学生成绩管理系统中还存在一些设计不够合理的地方,一些功能也不够优化。但是限于目前知识水平有限、时间比较紧,只能先这样提交。但是我会利用以后的课余时间继续完善这个学生成绩管理系统的。学习就是在不断地完善中进步的嘛。

第5篇:Oracle数据库管理系统实习总结

Oracle数据库管理系统实习总结

学习完oracle数据库后,我们进行了一次大实习,实习是分组进行的,我们组根据老师的安排,采用Oracle数据库技术建立员工工资及其个人所得税管理系统。小组成员主要是xx,xx和xxx。xx:整体设计,数据展现层操作,代码整合;xxx:数据库概念结构、逻辑结构、物理结构设计,增删改查sql语句的编写;xx:税值计算函数编写,系统测试,调试,相关文档的整理及编写。

通过对需要完成任务的整体分析,我得出需要做的工作包括这么几条:

1.根据需要创建自己的用户(注意起名规范,参见下述要求:对象含义_姓名首字母_学号后三位)和相关数据库表(比如类似在Hr Schema中的employees及departments表等)

2.编写一个函数(函数名需带姓名首字母及学号后三位),查出给定员工号的员工工资及佣金的每月应纳税额:注:个人所得税算法如下:扣除标准:工薪所得扣除标准提高到3500元,计算个人所得税税率表 :工资、薪金所得适用。

3.用Java作一个界面C/S,通过JDBC/ODAC/ADO调用oracle数据库对象,采用友好易用的用户界面:

 实现员工基本信息(含工资、奖金等)的增删改查;要求员工表主键是自增

长字段,使用sequence和触发器或存储过程实现自增长。

 实现员工工资及奖金和需缴纳的个人所得税等员工工资条信息的查询与(可

选的)Excel输出;

 通过调用存储过程实现各部门员工工资及其年收入的分析报表(具体分析需

求自定,如分析一下各部门员工中比本部门员工平均年收入高出30%的员工(可简称“高薪员工”)姓名、所在部门名和年收入金额、个人所得税等;)。接着我们的工作开始了。在开始的时候我们各做各的去了,很多意见和想法没有去及时沟通,所以各自盲目地做着,有些时候做不下去了也不知道去沟通,而是一个人呆着苦闷或是干脆不做了。所以在开始的时候大家对于怎么合作完成一个实习任务是不清楚的。因为每一个环节都不可能是孤立的,我们在每一步都需要去了解互相的进展和需要,比如李杨负责数据库的与平台的链接,我负责数据库的操作和结构设计,如果不去及时沟通,总不能知道我做成什么样让他能更好地操作,甚至我做好了数据库,他还不清楚,这时候其实是可以提前拿过去测试一下的。正如这种例子经常在我们前期工作的时候出现。经过我们前两天的工作,我们后来一起讨论了下下一步怎么配合。所以在后期我们都能很好地合作,顺利地完成了任务。

本学期oracle数据库的学习对于我了解数据库又有了进一步的理解和进一步加强了数据库的操作能力。对数据的更删改查更熟悉了,对用户的创建和管理有了进步。Oracle的学习,开始是在自己电脑上安装了软件,然后对软件的操作有了了解。在老师的讲解和学习中,学会了数据库的各种操作,创建了自己的永华和数据表,使用了oracle内置函数、调用存储过程和函数。学会使用PL/SQL的顺序、循环和分值结构。前面学习过数据库原理,通过这学期Oracle的课程觉得Oracle在用户的划分上要比SQL Server好很多,划分了多种用户级别,数据库也是以用户划分,这对于管理员和用户都是很有用的。Oracle的学习对于以后各种数据处理工作有很大的帮助,相信以后的学习中也会经常运用到oracle,我也将会不断加深对oracle的理解。

总结这些天的学习和工作,我感触颇深。我们课程设计采用了Asp.net技术,制作了一个B/S的员工工资及其个人所得税管理系统。我主要负责数据库结构、逻辑结构、物理结构设计,增删改查sql语句的编写。对数据库结构和逻辑结构、物理结构有了更熟悉的理解和运用,对数据库增删改查的aql语句进一步熟练。而且学数据库原理的时候已经做过一个自动求职系统,所以对数据库的连接和数据操作等都已经比较熟悉了,但oracle和SQL server还是有不一样的地方,例如这次用到自增id号,SQL server可以自增,而oracle要使id自增只有定义一个自增值。此次大作业以实践的方式操作Oracle数据库,觉得自己的技术得到了提升,包括切实参加一个系统设计的能力、与组员分工合作的能力、解决问题的能力等等。相信这份经验会对自己以后Oracle的学习有很重要的影响。

第6篇:oracle实训报告[推荐]

Unix与数据库课程

专业计算机应用技术

学号30802001533姓名赵彬彬

实训内容:oracle9i在红旗4.1平台上的安装

一.Oracle 9.2.0.4安装步骤

安装目录/oracle/binbin/product/9.2.0

1.安装环境检查

首先检查软硬件环境是否满足要求。要求:物理内存512M、安装所需磁盘空间约4G、临时存储空间如/tmp约1.5G、32位操作系统。

2.安装前准备

(1)从FTP下载安装文件和所需的操作系统补丁文件。

3个安装文件:disk1.cpio、disk2.cpio、disk3.cpio

1个操作系统补丁文件:p3006854_9204_LINUX.zip

(2)创建目录#mkdir –p /oracle/binbin/product/9.2.0

(3)配置虚拟机的网卡为桥接模式,配置id地址为192.168.1.54。利用ping命令,测试主机是否与linux通信。利用xftp工具,将上面四个文件传入oracle目录下。

(4)用putty登陆linux。创建安装Oracle数据库所要求的Linux用户和组:用户名oracle/oracle、组dba

#groupadd dba

#useradd –g dba oracle

#pawd oracle

输入oracle

再次确认密码

(5)oracle用户需要对/oracle目录有全部权限,修改/oracle目录的所有者为oracle用户所有。

#chown–Roracle:dba/oracle

(6)以oracle用户登录系统,修改oracle用户主目录下的.bash_profile文件,增加以下内容:

#vi /home/oracle/.bash_profile

export ORACLE_BASE=/oracle/binbin

export ORACLE_HOME=/oracle/binbin/product/9.2.0

export ORACLE_SID=binbin

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_DOC=$ORACLE_HOME/doc

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/claes1

2.zip

CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/nls_charset12.zip

CLASSPATH=$CLASSPATH:$ORACLE_HOME/sqlj/lib/translator.zip

CLASSPATH=$CLASSPATH:$ORACLE_HOME/sqlj/lib/runtime.zip

CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/*.jar

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/*.jar

CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/*.jar

CLASSPATH=$CLASSPATH:.export CLASSPATH

if [!$LD_LIBRARY_PATH ];then

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:$ORACLE_HOME/jdbc/lib

export LD_LIBRARY_PATH

fi

ulimit-n 65535 >/dev/null 2>&1

(7)以root登录系统为操作系统打补丁。即先将补丁文件解压,再运行shell来安装。

#unzip p3006854_9204_LINUX.zip

#sh rhel3_pre_install.sh

(8)将3个cpio安装文件解压缩。

#cpio –idmv n

#cpio –idmv n

#cpio –idmv n

3.开始安装

注意:oracle目录的拥有者必须为oracle。安装过程中,根据提示运行相应的文件。

(1)以oracle用户登录,启动图形界面(安装需要在图形界面下进行)。

(2)启动终端窗口,进行如下两项环境设置,然后运行安装程序runInstaller进入安装界面。

$export DISPLAY=:0.0

$export LANG=C

$./runInstaller

4.测试安装

#sqlplus /nolog

SQL>conn /as sysdba

SQL>show SGA

Total System Global Area219223120 bytes

Fixed Size451664 bytes

Variable Size201326592 bytes

Database Buffers16777216 bytes

Redo Buffers667648 bytes

SQL> select file_name from dba_data_files;

FILE_NAME

--------------------------

/oracle/binbin/oradata/binbin/system01.dbf

/oracle/binbin/oradata/binbin/undotbs01.dbf

/oracle/binbin/oradata/binbin/cwmlite01.dbf

/oracle/binbin/oradata/binbin/drsys01.dbf

/oracle/binbin/oradata/binbin/example01.dbf

/oracle/binbin/oradata/binbin/indx01.dbf

/oracle/binbin/oradata/binbin/odm01.dbf

/oracle/binbin/oradata/binbin/tools01.dbf

/oracle/binbin/oradata/binbin/users01.dbf

/oracle/binbin/oradata/binbin/xdb01.dbf

SQL> select name from v$controlfile;

NAME

-----------------

/oracle/binbin/oradata/binbin/control01.ctl

/oracle/binbin/oradata/binbin/control02.ctl

/oracle/binbin/oradata/binbin/control03.ctl

二.遇到的问题:

1.磁盘空间不足

解决的方法:关闭虚拟机,选择编辑虚拟机,添加一块磁盘,大小为8G。然后打开虚拟机。用root用户登录,输入fdisk –l,查看系统是否识别硬盘。再输入fdisk /dev/sdb,对SCSI第二块硬盘进行分区。分区后,用mkfs –t ext3 /dev/sdb1进行格式化。最后把/dev/sdb1挂载到/oracle目录下。

2.无法连接到图形界面

解决的方法:把root用户注销,此时就oracle登录系统,并且以oracle用户进入的图形界面。

3.权限不足

解决方法:把三个文件拥有者的权限授予oracle,并查看/oracle目录拥有者是否为oracle。

4.oracle用户无法启动图形界面

解决方法:删除tmp目录下的临时文件。

5.临时文件产生的错误

解决方法:删除先前的临时文件。

三.收获

体会:通过这次安装oracle的实践,充分运用以前所学的linux基础,更好的运用这些知识。体会到光看课本是不行的,必须付出实践,在实践中学习,在实践中增长知识才是最快的。实践能力是最重要的。

感想:通过这次实训,我明白实践是很重要的,是检验你学习知识的深度,学习的能力。做什么也不能急于求成,先做好先前准备,再着手安装。过程中出现问题是很正常的,要沉下心来分析出现的问题,针对问题找出解决的方法。

第7篇:Oracle认证

Oracle 认证

Oracle认证证书只是让雇主了解到来应聘的人通过了Oracle数据库方面的技术考试。而实际上,Oracle认证也只是衡量一个应聘者的一个标准之一,其他的标准还有: 1.出色的交际能力。Oracle DBA通常都要和IT行业的技术专家打交道,因此,他或她就必须能够为所有访问Oracle数据库的开发人员或程序员清晰明了的解释Oracle概念。有些时候,Oracle DBA也是一名管理人员,因此,也同样要求他在参与战略发展计划以及数据库设计上要有出色的交际能力。

2.同类的专业学位。大多数成功的Oracle专业人士都要求由计算机或信息系统专业学士学位。对于更高的职位,比如Oracle DBA,很多雇主都要求由计算机专业硕士学位或MBA。

3.一定的实践经验。这是有了OCP证书的新人们最担心的一件事情。很多有了OCP证书又没有工作经验的人都在抱怨没有OCP证书就不会有工作经验,没有工作经验就不会有工作。这是现在人才市场上一个很棘手的问题。

4.丰富的数据库理论知识。除了要掌握OCP所要求的技术知识外,一名成功的Oracle专业人士还要有与数据库以及数据库设计相关的软件知识,包括数据库标准化理论以及采用统一建模语言(UML)的面向对象模型,当然还有其他的数据库设计方法相关知识,比如CORBA和J2EE。

归根结底,OCP并不能完全衡量一个人的实际水平,而只是为非IT行业人士进入Oracle领域提供一个方法。

DBA认证

Oracle OCP DBA认证是所有Oracle认证中最普及的一种认证,本来,Oracle认证是专为专业人士设计的,想要参加考试的人员必须要具有DBA 4年以上工作经验的书面证明材料才有资格参加考试,但是,随着对Oracle专业人才需求的迅猛增长,Oracle放松了对这项认证要求,在Oracle9I中,Oracle提供了3级认证。

辅助认证OCA

这项较低级的认证是Oracle专为那些仅通过OCP两项考试的人员设计的初级技能水平考试,是使用Oracle产品的基础。要获得OCA证书,必须通过自己选择的认证途径上的两次考试。第一次可以通过Internet进行,第二次考试则必须在授权的Pearson VUE考试中心进行。

9I专业认证OCP

Oracle专业认证要求通过4门具有一定难度的考试,以证实在Oracle数据库管理领域内的熟练程度专家级技能和技术知识考试,通过这种考试之后,说明此人可以管理大型数据库,或者能够开发可以部署到整个企业的强大应用。要成为OCP,必须先获得OCA证书,然后才能参加OCP要求的其他考试。参加OCP认证的学员必须至少在Oracle大学或者其授权培训中心学习一门课程才能获得OCP证书。这些考试也必须在授权的国际认证考试中心进行。获得OCP证书后,您将有机会申请更高的职位,并增强老板对您的信任和支持。

专家级认证OCM

这项新的Oracle认证要求参试人员必须参加Oracle大学的Oracle培训,它是1990s时期前Oracle专家认证的一个分支,OCM要求参试人员必须完成下面的几项任务:

获得OCP

参加Oracle大学的两门高级课程。通过Oracle试验室的实践测试。

资深专家级Oracle技能考试,通过后将成为企业内的资深专家。OCM不但有能力处理关键业务数据库系统和应用,还能帮助客户利用Oracle技术获得成功。要想获得OCM证书,必须先通过OCP考试,再学习Oracle大学开设的两门高级技术课程,并通过预考,然后在Oracle实验环境内成功地通过实习考试。实习考试的目的是培养动手能力,学员必须实际完成职业需要的真正任务。

认证过程

这一过程是专为那些想要从事Oracle管理的专业数据库管理人员设计的,适用于Oracle9I DBAs的OCP认证通过改进,删除了备份和恢复以及网络考试,而且,PL/SQL、SQL也被分成了不同的考试,Oracle9I

OCP认证要通过下面的一系列考试:

Oracle9I入门:SQL——这门考试是为了测试SQL编程的一些概念,包括外部衔接、查询以及Oracle到ANSI SQL的扩展

Oracle9I数据库:基础I——这门基本数据库管理考试是为了测试数据库创建、规划对象以及网络结构的专业知识

Oracle9I数据库:基础II——这门高级Oracle DBA考试是为了测试高级数据库结构、安全性以及Oracle界面

Oracle9I数据库:性能调整——这门考试是为了测试参试人员在Oracle开发环境下规划调整、对象调整以及SQL调整的能力

网络应用

Oracle网络应用开发人员认证过程是为Oracle应用开发人员设计的,包括4门考试和两种可选途径。入门心得

oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。

oracle分两大块,一块是开发,一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭J;管理则需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会down掉整个数据库,相对前者来说,后者更看重经验。

因为数据库管理的责任重大,很少公司愿意请一个刚刚接触oracle的人去管理数据库。对于刚刚毕业的年轻人来说,可以先选择做开发,有一定经验后转型,去做数据库的管理。当然,这个还是要看人个的实际情况来定。

学习方法

方法很简单,就是:看书、思考、写笔记、做实验、再思考、再写笔记。

看完理论的东西,自己静下心来想想,多问自己几个为什么,然后把所学和所想的知识点做个笔记;在想不通或有疑问的时候,就做做实验,想想怎么会这样,同样的,把实验的结果记下来。思考和做实验是为了深入的了解这个知识点。而做笔记的过程,也是理清自己思路的过程。

学习的过程是使一个问题由模糊到清晰,再由清晰到模糊的过程。而每次的改变都代表着你又学到了一个新的知识点。

学习的过程也是从点到线,从线到网,从网到面的过程。当点变成线的时候,你会有总豁然开朗的感觉。当网到面的时候,你就是高手了

很多网友,特别是初学的人,一碰到问题就拿到论坛上来问,在问前,你有没有查过书,自己有没有研究过,有没有搜索一下论坛?这就叫思维惰性。由别人来回答你的问题,会让你在短时间内不费劲地弄懂这个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点,更重要的是在研究的过程会提高你解决问题和分析问题的能力。总的来说,没有钻研的学习态度,不管学什么东西,都不会成功的。

当然,初学的人很多时候是因为遇到问题时,无从下手,也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别人是如何分析这个问题?从哪里可以找到相关的资料?而不是这个问题的答案是什么?授人以鱼不如授人以渔。

处理问题

首先要知道oracle的官方网站,这里有oracle的各种版本的数据库、应用工具和权威的官方文档。其次,还要知道这里是买了oracle服务或是oracle的合作伙伴才可以进去的,里面有很多权威的解决方案和补丁。然后就是一些著名网站这里有很多经验之谈。

遇到问题了。如果是概念上的问题,第一时间可以找网站,这里会给你最详细的解释。如果在运行的过程中出了什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当

然。这里只是相对而言。

oracle体系

oracle的体系很庞大,要学习它,首先要了解oracle的框架。在这里,简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识。

物理结构

(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)

控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件

数据文件:存储数据的文件

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件

参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数

归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

密码文件:认证哪些用户有权限启动和关闭Oracle例程

逻辑结构

(表空间、段、区、块)

表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。

段:是对象在数据库中占用的空间

区:是为数据一次性预留的一个较大的存储空间

块:ORACLE最基本的存储单位,在建立数据库的时候指定

内存分配

(SGA和PGA)

SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收

后台进程

(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件

系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控:负责在一个Oracle 进程失败时清理资源

检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程:在每次日志切换时把已满的日志组进行备份或归档

服务进程:用户进程服务。

用户进程:在客户端,负责将用户的SQL 语句传递给服务进程,并从服务器段拿回查询数据。oracle例程

Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。

SCN

(System Change Number):系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。

继续深造

管理

可以考OCP证书,对oracle先有一个系统的学习,然后看Oracle Concepts、oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER等等。

开发

对于想做Oracle开发的,在了解完Oracle基本的体系结构之后,可以重点关注PL/SQL及Oracle的开发工具这一部分。PL/SQL主要是包括怎么写SQL语句,怎么使用Oracle本身的函数,怎么写存储过程、存储函数、触发器等。Oracle的开发工具主要就是Oracle自己的Developer Suite(Oracle Forms Developer and Reports Developer这些),学会如何熟练使用这些工具。

相关书籍

介绍几本oracle入门的好书

oracle官方文档:《concept》上面讲了oracle的体系和概念,很适合初学者看。

OCP的教学用书,也就是STUDY GUIDE(SG)。

Oracle8i 备份恢复手册

Oracle8高级管理与优化

Oracle8i PLSQL程序设计

Oracle8数据库管理员手册

以上书本都是机械工业出版社出版。

参加培训

首先是一个参不参加培训的问题。关于这个问题的争论一直很多。我觉得如果条件允许的情况下,建议还是参加培训,这样你对认证本身的课程可能会有一个相对来说比较直观的了解,这对你以后的学习是非常有帮助的。如果参加培训的话,找一家好的培训中心是首要任务,这该如何选择呢?首先要看培训中心的规模,其次就是看老师的水平,再就要看看培训中心的硬件设备怎么样。选择一个适合自己的培训中心对你来说绝对是大有裨益的。

再就是可以考虑一下网校培训,不仅能为你节省很多时间,还可以根据你自身的时间安排,什么时候都可以学习,在这里为大家推荐一个很好的网校——中国IT实验室网校,只需1个帐号就可以完成学习过程;结合官方标准授课环境,大量工程引用案例进行分析;课程零基础学起,中文式教学,理论讲解深入浅出;学习不受时间、空间影响,只要有电脑,随时可以学习;充足的实验时间,拥有30小时的远程实验机时,根据拓扑结构图可以完成CCNA所有实验,自动机时预定系统,7×24远程实验服务;题库系统涵盖最新高度仿真的Actual Exam Questions,网校虚拟考场10次中能通过6~8,认证考试将无问题;学员专用FTP服务器,24小时提供最新动向和考试内部资料。

职业前景

在Oracle的官方同站上,Oracle公司详细列举了获得OCP认证的种种好处,虽然有自卖自夸之嫌,但总的来说还是很有道理的。

总的来说,IT业对专家的要求很高,职业竞争压力很大。无论是新进入这个行业的人,还是此行业中的老手,都需要知道他们的那些技术背景能真正吸引到雇主的眼光。同时,雇主们也需要一个标准帮助他们挑选出那些技术上真正过硬的雇员。OCP认证就能够帮助IT业界建立起面向特定职位的选择标准。OCP认证是一个有价值的、业界承认的标准,这个标准可以证明持证者的知识和能力水平。

认证作用

Oracle认证对技术专家的好处:OCP认证可以给你一个鲜明的优势。OCP认证可以表明你对某一职位及相关的Oracle产品有着深刻的理解。成为一个OCP认证专家可以帮助你被更多的雇主注意到,并且增加你获得IT业最具挑战性机遇的机会。OCP认证专家们证实了OCP认证的价值:97%的 OCP认为他们获益于OCP认证;89%的OCP认为获得认证后,他们在Oracle专家的职位上更具信心;96%的OCP认为他们会建

议职业学校(profeional College,普遍存在于美国的一种职业教育方式)开相应的课程。

Oracle认证对IT雇主的好处:OCP认证同时可以帮助IT业的人事经理在应聘者中挑选出符合挑战性职位的员工。对于那些每年把员工送去培训的公司,认证可以保证他们在培训上的钱没有白花--他们的员工获得了对于深入理解和必要的知识。公司也可以把认证和员工的职业发展联合起来,这样可以增强员工的忠诚度及他们在职业岗位上的表现。同时,雇用获得认证的专家可以直接提高公司的实力,国际数据公司的一项研究显示了这一点。这项研究指出获得认证的专家比那些没有通过认证的平均每人每天多处理40%的支持电话;雇用认证专家的公司比那些没有雇用的公司宕机的时间少49%;对大多数公司的调查显示,在不到9个月内,认证专家为他们节约的费用就超过了他们送专家去培训并获得认证的费用。

第8篇:oracle语法

第一篇 基本操作

--解锁用户 alter user 用户 account unlock;--锁定用户 alter user 用户 account lock;alter user scott account unlock;

--创建一个用户yc 密码为a create user 用户名 identified by 密码; create user yc identified by a;

--登录不成功,会缺少create seion 权限,赋予权限的语法 grant 权限名 to 用户; grant create seion to yc;

--修改密码 alter user 用户名 identified by 新密码; alter user yc identified by b;

--删除用户 drop user yc;

--查询表空间

select *from dba_tablespaces;--查询用户信息

select *from dba_users;--创建表空间

create tablespace ycspace datafile 'E:oracleappproduct11.2.0dbhome_1oradataycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline;

--创建临时表空间

create temporary yctempspace tempfile 'E:oracleappproduct11.2.0dbhome_1oradataycspace.dbf' size 2m autoextend on next 2m maxsize 5m offline;

--查询数据文件

select *from dba_data_files;

--修改表空间

--

1、修改表空间的状态

--默认情况下是online,只有在非离线情况下才可以进行修改

alter tablespace ycspace offline;--离线状态,不允许任何对象对该表空间的使用,使用情况:应用需要更新或维护的时候;数据库备份的时候 alter tablespace ycspace read write;--读写状态 alter tablespace ycspace online;alter tablespace ycspace read only;--只读,可以查询信息,可以删除表空间的对象,但是不能创建对象和修改对象。使用情况:数据存档的时候

--

2、修改表空间的大小 --增加文件的大小

alter database datafile 'E:oracleappproduct11.2.0dbhome_1oradataycspace.dbf' resize 10m;--增加数据文件

alter tablespace ycspace add datafile 'E:oracleappproduct11.2.0dbhome_1oradataadd.dbf' size 2m;

--删除表空间的数据文件

alter tablespace 表空间的名字 drop datafile 数据文件名;

--删除表空间

drop tablespace ycspace;

--删除表空间且表空间中的内容和数据文件

drop tablespace ycspace including contents and datafiles;

--指定表空间 的 创建用户的语法

create user yc1 identified by a default tablespace ycspace temporary tablespace temp;

--删除用户 drop user yc1;

--权限

--赋予创建会话的权限 grant create seion to yc1;

--创建一个表

create table studentInfo(sid int, sname varchar2(10));

--赋予yc1用户创建表的权限 grant create table to yc1;--赋予yc1使用表空间的权限 grant unlimited tablespace to yc1;

--系统权限

--对象权限

--插入

insert into studentInfo values(2,'abcd');--查询

select *from studentInfo;--修改

update studentInfo set sid=1;--删除

delete studentInfo;drop table studentInfo;--系统权限删除表

--赋权的语法

--系统权限

grant 权限名(系统权限或对象权限,角色,all)to 用户(角色,public)with admin option;

--对象权限

grant 权限名(系统权限或对象权限,角色,all)on 用户(角色,public)with grant option;

--收权语法--系统权限

revoke 权限名(系统权限或对象权限,角色,all)from 用户(角色,public)with admin option;--对象权限

revoke 权限名(系统权限或对象权限,角色,all)from 用户(角色,public)with grant option;

--赋予创建用户的权限并且把这个权限传递下去,即yc1可以给别人赋权 grant create user to yc1 with admin option;

--收回权限,只能收回scottd ,不能收回由scott赋权的yc1的权限 revoke create user from scott;

--查看用户所具有的权限 select *from user_sys_privs;

--对象权限详解 select * from emp;--使用yc1来查询scott里面的emp表 select * from scott.emp;

--赋予yc1查询emp表和插入的权限 grant select on emp to yc1;grant insert on emp to yc1;grant update(empno,ename)on emp to yc1;

grant delete on emp to yc1;

--对scott的emp表添加数据

insert into scott.emp(empno,ename)value(111,'acv');update scott.emp set ename='yc'where empno=111;

--赋予查询、赋予删除、添加、修改 grant select on 表名 to 用户

--grant select,delete,update,insert on 表名 to 用户 grant select,delete,update,insert on emp to yc1;grant all on dept to yc1;--all代表所有的对象权限

select *from scott.emp;

select *from scott.dept;insert into scott.dept values(50,'企事业文化部','bumen');

--查看角色

--dba:数据库管理员,系统最高权限,可以创建数据结构(表空间等)--resource:可以创建实体(表、视图),不可以创建数据库的结构

--connect:连接的权限,可以登录数据库,但是不可以创建实体和不可以创建数据库结构

select *from role_sys_privs;

grant connect to yc1;

--将可以连接的角色赋予给yc1,则yc1就是应该可以连接数据库的人,类似于 create seion。create table StuInfos(sid int);

select *from StuInfos;

create table stuInfo(sid int primary key ,--主键 primary key 非空且唯一(主键约束)sname varchar2(10)not null,--姓名不能为空,(非空约束)sex char(2)check(sex in('男','女')),--(检查约束),check, age number(3,1)constraint ck_stuInfo_age check(age>10 and age

insert into stuInfo values(3,'大大','男',18,4321543,default);insert into stuInfo values(1,'张三','男',10);select *from stuInfo;

drop table stuInfo;

create table claInfo(cid int primary key,--班级id cname varchar2(20)not null unique--班级名)create table stuInfo(sid int primary key, sname varchar2(20), cid int constraint fofk_stuInfo_cid references claInfo(cid)on delete cascade)insert into claInfo values(1,'1班');insert into claInfo values(2,'2班');insert into claInfo values(3,'3班');insert into claInfo values(4,'4班');

select *from claInfo;select *from stuInfo;

insert into stuInfo values(1001,'张三',2);insert into stuInfo values(1002,'张四',4);

update claInfo set cid=1 where cid=8;

drop table stuInfo;--要先删除这个 drop table claInfo;--再删除这个

delete claInfo where cid=4;--同时删除这两个表中的4

--删除用户的时候

drop user yc1 [cascade]--删除用户的同时把它创建的对象都一起删除

--修改表

--

1、添加表中字段

--alter table 表名 add 字段名 类型

alter table claInfo add status varchar2(10)default '未毕业'

--

2、修改已有字段的数据类型

--alter table 表名 modify 字段名 类型 alter table claInfo modify status number(1)

--

3、修改字段名

--alter table 表名 rename column 旧字段名 to 新的字段名 alter table claInfo rename column cname to 班级名;

--

4、删除字段 --alter table 表名 drop column 字段名 alter table claInfo drop column status;

--

5、修改表名

--rename 旧表名 to 新表名 rename claInfo to 班级信息;

--删除表

--

1、截断表效率高,每删除一次会产生一次日志

2、截断会释放空间,而delete不会释放空间

--删除表结构和数据 drop table 表名;--删除表中所有数据 truncate table claInfo;delete claInfo;

create table claInfo(cid int primary key,--班级id cname varchar2(20)not null unique ,--班级名 stasuts varchar2(100));select *from claInfo;

--数据的操作

--增加数据语法

--insert into 表名[(列名,....)] values(对应的数据的值);

insert into claInfo values(1,'一班','未毕业');--需要按照表结构的顺序插入 insert into claInfo values(4,'六班','未毕业');insert into claInfo(cname,cid)values('二班',2);--需要按照括号中的顺序插入,但是 not null primary key 必须插入的。

insert into claInfo(cname,cid)values('三班',3);

--删除的语法

--delete 表名 [where 条件] delete claInfo where cid>=2;

--修改记录的语法

--update 表名 set [字段='值' ] [where 条件] update claInfo set cname='三班';--会修改所有该字段 update claInfo set cname='四班' where cid=1;update claInfo set cname='五班', stasuts ='未毕业' where cid=3;

--alter table claInfo drop constraint SYS_C0011213;

--添加多个时可以使用序列--用序列来做自动增长

create sequence seq_claInfo_cid start with 1001 increment by 1;

insert into claInfo values(seq_claInfo_cid.Nextval,'七班','未毕业');insert into claInfo values(seq_claInfo_cid.Nextval,'八班','未毕业');insert into claInfo values(seq_claInfo_cid.Nextval,'九班','未毕业');insert into claInfo values(seq_claInfo_cid.Nextval,'十班','未毕业');

create table claInfo2(cid int primary key,--班级id cname varchar2(20)not null unique ,--班级名 stasuts varchar2(100));select *from claInfo2;drop table claInfo2;

insert into claInfo2 select *from claInfo;insert into claInfo(cname,cid)select cname,cid from claInfo;alter table claInfo2 drop constraint SYS_C0011213;

select seq_claInfo_cid.nextval from dual;select seq_claInfo_cid.Currval from dual;

--直接创建一个新表,并拿到另一个表其中的数据 create table newTable as select cname,cid from claInfo;create table newTable1 as select *from claInfo;

select *from newTable;select *from newTable1;insert into newTable1 values(1008,'dg','');

直接在使用scott登陆,进行查询操作

----------------------简单查询

select *from emp;

select empno as id,ename as name from emp;

select empno 编号,ename 姓名 from emp;

--去除重复

select job from emp;select distinct job from emp;select job,deptno from emp;select distinct job,deptno from emp;

--字符串的连接

select '员工编号是' ||empno || '姓名是' ||ename ||'工作是'||job from emp;

--乘法

select ename,sal *12 from emp;--加减乘除都类似

---------限定查询

--奖金大于1500的select *from emp where sal>1500;--有奖金的select *from emp where comm is not null;--没有奖金的select *from emp where comm is null;--有奖金且大于1500的select *from emp where sal>1500 and comm is not null;--工资大于1500或者有奖金的select *from emp where sal>1500 or comm is not null;--工资不大于1500且没奖金的select *from emp where sal1500 or comm is not null);--工资大于1500但是小于3000的select *from emp where sal>1500 and sal

--时间区间

select *from emp where hiredate between to_date('1981-01-01','yyyy-MM-dd')and to_date('1981-12-31','yyyy-MM-dd');--查询雇员名字

select *from emp where ename='SMITH';--查询员工编号

select *from emp where empno=7369 or empno=7499 or empno=7521;select *from emp where empno in(7369,7499,7521);select *from emp where empno not in(7369,7499,7521);--排除这3个,其他的都可以查

--模糊查询

select *from emp where ename like '_M%';--第2个字母为M的 select *from emp where ename like '%M%';select *from emp where ename like '%%';--全查询

--不等号的用法

select * from emp where empno!=7369;select *from emp where empno 7369;

--对结果集排序--查询工资从低到高

select *from emp order by sal asc;select *from emp order by sal desc,hiredate desc;--asc 当导游列相同时就按第二个来排序--字符函数

select *from dual;--伪表 select 2*3 from dual;select sysdate from dual;--变成大写

select upper('smith')from dual;--变成小写

select lower('SMITH')from dual;--首字母大写

select initcap('smith')from dual;--连接字符串

select concat('jr','smith')from dual;--只能在oracle中使用 select 'jr' ||'smith' from dual;--推荐使用--截取字符串

select substr('hello',1,3)from dual;--索引从1开始--获取字符串长度 select length('hello')from dual;--字符串替换

select replace('hello','l','x')from dual;--把l替换为x-------通用函数--数值函数--四舍五入

select round(12.234)from dual;--取整的四舍五入 12 select round(12.657,2)from dual;--保留2位小数 select trunc(12.48)from dual;--取整

select trunc(12.48675,2)from dual;--保留2位小数--取余

select mod(10,3)from dual;--10/3取余 =1

--日期函数

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

--查询员工进入公司的周数

select ename,round((sysdate-hiredate)/7)weeks from emp;--查询所有员工进入公司的月数

select ename,round(months_between(sysdate,hiredate))months from emp;--求三个月后的日期

select add_months(sysdate,6)from dual;select next_day(sysdate,'星期一')from dual;--下星期 select last_day(sysdate)from dual;--本月最后一天

select last_day(to_date('1997-1-23','yyyy-MM-dd'))from dual;

--转换函数 select ename , to_char(hiredate,'yyyy')年,to_char(hiredate,'mm')月,to_char(hiredate,'dd')日 from emp;

select to_char(10000000,'$999,999,999')from emp;

select to_number('20')+to_number('80')from dual;--数字相加

--查询员工年薪

select ename,(sal*12+nvl(comm,0))yearsal from emp;--空和任何数计算都是空

--Decode函数,类似if else if(常用)

select decode(1,1,'one',2,'two','no name')from dual;--查询所有职位的中文名 select ename, decode(job, 'CLERK', '业务员', 'SALESMAN', '销售', 'MANAGER', '经理', 'ANALYST', '分析员', 'PRESIDENT', '总裁', '无业')from emp;

select ename, case when job = 'CLERK' then '业务员' when job = 'SALESMAN' then '销售' when job = 'MANAGER' then '经理' when job = 'ANALYST' then '分析员' when job = 'PRESIDENT' then '总裁' else '无业' end from emp;

-----------------------------

--多表查询

select *from dept;select *from emp,dept order by emp.deptno;select *from emp e,dept d where e.deptno=d.deptno;select e.*,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

--查询出雇员的编号,姓名,部门编号,和名称,地址

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

--查询出每个员工的上级领导

select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno;

select e.empno,e.ename,d.dname from emp e,dept d ,salgrade s, emp e1 where e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.mgr=e1.empno;

select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno(+);

--外连接

select *from emp order by deptno;--查询出每个部门的员工 /* 分析:部门表是全量表,员工表示非全量表,在做连接条件时,全量表在非全量表的哪端,那么连接时全量表的连接条件就在等号哪断 */--左连接

select * from dept d,emp e where d.deptno=e.deptno(+)order by e.deptno;--右连接

select * from emp e,dept d where e.deptno(+)=d.deptno order by e.deptno;

-----------------------------作业

--查询与smith相同部门的员工姓名和雇佣日期 select *from emp t where t.deptno=(select e.deptno from emp e where e.ename='SMITH')and t.ename 'SMITH';

--查询工资比公司平均工资高的员工的员工号,姓名和工资 select t.empno,t.ename,t.sal from emp t where t.sal>(select avg(sal)from emp);

--查询各部门中工资比本部门平均工资高的员工号,姓名和工资 select t.empno,t.ename,t.sal from emp t,(select avg(e.sal)avgsal,e.deptno from emp e group by e.deptno)a where t.sal>a.avgsal and t.deptno=a.deptno;--查询姓名中包含字母u的员工在相同部门的员工的员工号和姓名 select t.empno,t.ename from emp t where t.deptno in(select e.deptno from emp e where e.ename like '%U%')and t.empno not in(select e.empno from emp e where e.ename like '%U%');

--查询管理者是king的员工姓名和工资 select t.ename,t.sal from emp t where t.mgr in(select e.empno from emp e where e.ename='KING');

--------------------------sql1999语法

select *from emp join dept using(deptno)where deptno=20;select *from emp natural join dept;select *from emp e join dept d on e.deptno=d.deptno;select *from dept;select *from dept d left join emp e on d.deptno=e.deptno;select *from dept d,emp e where d.deptno=e.deptno(+);

---分组

select count(empno)from emp group by deptno;select deptno,job,count(*)from emp group by deptno,job order by deptno;select *from EMP for UPDATE;

--group by 后面有的字段,select后才可以有,group by后面没有的字段,select后面绝对不能有

select d.dname, d.loc, count(e.empno)from emp e, dept d where e.deptno = d.deptno group by d.dname, d.loc;

---------子查询

select *from emp t where t.sal>(select *from emp e where e.empno=7654);

select rownum ,t.* from emp t where rownum

--pagesize 5 select *from(select rownum rw,a.* from(select *from emp)a where rownum 10;select *from(select *from emp)where rownum>0;--索引

create index person_index on person(p_name);

--视图

create view view2 as select *from emp t where t.deptno=20;select *from view2;

-------------pl/sql--plsql是对sql语言的过程化扩展-----declare begin dbms_output.put_line('hello world');end;-------declare age number(3);marry boolean := true;--boolean不能直接输出 pname varchar2(10):= 're jeknc';begin age := 20;dbms_output.put_line(age);if marry then dbms_output.put_line('true');else dbms_output.put_line('false');end if;dbms_output.put_line(pname);end;

--常量和变量

--引用变量,引用表中的字段的类型

Myname emp.ename%type;--使用into来赋值

declare pname emp.ename%type;begin select t.ename into pname from emp t where t.empno=7369;dbms_output.put_line(pname);end;

--记录型变量

Emprec emp%rowtype;--使用into来赋值

declare Emprec emp%rowtype;begin select t.* into Emprec from emp t where t.empno=7369;dbms_output.put_line(Emprec.empno || ' '||Emprec.ename||' '||Emprec.job);end;

--if分支

语法1:

IF 条件 THEN 语句1;语句2;END IF;语法2:

IF 条件 THEN 语句序列1; ELSE 语句序列 2; END IF; 语法3:

IF 条件 THEN 语句;ELSIF 条件 THEN 语句;ELSE 语句;END IF;--1 declare pname number:=# begin if pname = 1 then dbms_output.put_line('我是1');else dbms_output.put_line('我不是1');end if;end;--2 declare pname number := # begin if pname = 1 then dbms_output.put_line('我是1');elsif pname = 2 then dbms_output.put_line('我是2');else dbms_output.put_line('我不是12');end if;end;

--loop循环语句 语法2: Loop EXIT [when 条件];…… End loop

--1 declare pnum number(4):=0;

begin while pnum

--2(最常用的循环)declare pnum number(4):=0;begin loop exit when pnum=10;pnum:=pnum+1;dbms_output.put_line(pnum);end loop;end;--3 declare pnum number(4);begin for pnum in 1..10 loop dbms_output.put_line(pnum);end loop;end;

-----游标 语法:

CURSOR 游标名 [(参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;例如:cursor c1 is select ename from emp;

declare cursor c1 is select * from emp;emprec emp%rowtype;begin open c1;loop fetch c1 into emprec;exit when c1%notfound;dbms_output.put_line(emprec.empno || ' ' || emprec.ename);end loop;close c1;--要记得关闭游标 end;

--------例外

--异常,用来增强程序的健壮性和容错性--no_data_found(没有找到数据)--too_many_rows(select …into语句匹配多个行)--zero_pide(被零除)--value_error(算术或转换错误)--timeout_on_resource(在等待资源时发生超时)

--写出被0除的例外程序 declare pnum number(4):= 10;begin pnum := pnum / 0;exception when zero_pide then dbms_output.put_line('被0除了');when value_error then dbms_output.put_line('算术或转换错误');when others then dbms_output.put_line('其他异常');end;

--自定义异常

--No_data exception;--要抛出raise no_data;

declare cursor c1 is select * from emp t where t.deptno = 20;no_data exception;emprec emp%rowtype;begin open c1;loop fetch c1 into emprec;if c1%notfound then raise no_data;else dbms_output.put_line(emprec.empno || ' ' || emprec.ename);end if;end loop;close c1;

exception when no_data then dbms_output.put_line('无员工');when others then dbms_output.put_line('其他异常');end;

--存储过程 语法:

create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)] AS begin PLSQL子程序体; End;

或者

create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)] is begin PLSQL子程序体; End 过程名;

-----创建一个存储过程helloworld create or replace procedure helloworld is begin dbms_output.put_line('hello world');end helloworld;

------创建一个涨工资的create or replace procedure addsal(eno in emp.empno%type)is emprec emp%rowtype;begin select * into emprec from emp t where t.empno = eno;

update emp t set t.sal = t.sal + 100 where t.empno = eno;dbms_output.put_line('涨工资前是' || emprec.sal || ',涨工资后是' ||(emprec.sal + 100));end addsal;

-----------------java代码调用存储过程和函数--存储过程--create or replace procedure acc_yealsal(eno in emp.empno%type,yearsal out number)is pcomm emp.comm%type;psal emp.sal%type;begin select t.sal,t.comm into psal,pcomm from emp t where t.empno=eno;yearsal :=psal*12 +nvl(pcomm,0);end;----存储函数

create or replace function 函数名(Name in type, Name in type,...)return 数据类型 is 结果变量 数据类型;begin

return(结果变量);end函数名;--存储函数计算年薪

create or replace function accf_yearsal(eno in emp.empno%type)return number is Result number;psal emp.sal%type;pcomm emp.comm%type;begin select t.sal, t.comm into psal, pcomm from emp t where t.empno = eno;Result := psal * 12 + nvl(pcomm, 0);return(Result);end accf_yearsal;

-------触发器

--触发语句:增删改: 语法:

CREATE [or REPLACE] TRIGGER 触发器名 {BEFORE | AFTER} {DELETE | INSERT | UPDATE [OF 列名]} ON 表名

[FOR EACH ROW [WHEN(条件)] ] begin PLSQL 块 End 触发器名

---插入一个新员工则触发

create or replace trigger insert_person after insert on emp begin dbms_output.put_line('插入新员工');end;select *from emp;insert into emp values(1001,'李四','管理',7902,sysdate,100,100,20);

--raise_application_error(-20001, '不能在非法时间插入员工')

--================================ SQL> @ E:powerDesignerA_脚本user.sql--导入脚本文件

select *from H_USER;

insert into h_user valuer(sequserid.nextval,'a','a',sysdate,'北京',1);

--数据库建模

--一对多:多的一端是2,箭头指向的是表1,即少的一端

--在实体类中一的一端的实体类有多的一端的实体类的集合属性

--使用powerDesiger进行数据库建模,然后将数据导入,导入到plsql中进行使用

--------------------连接远程数据库--方法1,修改localhost的地址 ORCL =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl.lan)))--方法2--或者直接在登陆界面在database中输入远程数据库的ip地址和端口号进行远程登陆 1.create user username identified by paword;//建用户名和密码oracle ,oracle

2.grant connect,resource,dba to username;//授权 grant connect,resource,dba,sysdba to username;

3.connect username/paword//进入。

4.select table_name,column_name from user_tab_columns where table_name='TABLE_NAME';//查询表中的表名,字段名等等。最后的table_name要大写。

5.如何执行脚本SQL文件? SQL>@PATH/filename.sql;

7.查询用户下的所有表 select distinct table_name from user_tab_columns;===仅显示一列表名。

8.如何搜索出前N条记录?

select * from tablename where rownum

9.查找用户下的所有表:select * from tab;--查询该用户下的所有表及视图(显示表名tname,类型tabname和clusterid)

2、显示当前连接用户

SQL> show user –不能用在sql窗口 只能用在command命令窗口。

3、查看系统拥有哪些用户

SQL> select * from all_users;

4、新建用户并授权

SQL> create user a identified by a;(默认建在SYSTEM表空间下)

SQL> grant connect,resource to a;

5、连接到新用户

SQL> conn a/a –或者是connect a/a

6、查询当前用户下所有对象

SQL> select * from tab;--table或是view

7、建立第一个表

SQL> create table a(a number);

8、查询表结构

SQL> desc a

9、插入新记录

SQL> insert into a values(1);

10、查询记录

SQL> select * from a;

11、更改记录

SQL> update a set a=2;

12、删除记录

SQL> delete from a;

13、回滚

SQL> roll;

SQL> rollback;

14、提交

SQL> commit;

select * from

(select t.*,dense_rank()over(order by cardkind)rank from cardkind t)

where rank = 2;

46.如何在字符串里加回车?

select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from dual;--‘||chr(10)||’作为换行符

53.如何使select语句使查询结果自动生成序号?

select rownum COL from table;--主要就是oracle中引入了rownum

54.如何知道数据裤中某个表所在的tablespace?

select tablespace_name from user_tables where table_name='TEST';--table_name名称要大写。

select * from user_tables中有个字段TABLESPACE_NAME,(oracle);

select * from dba_segments where …;

55.怎么可以快速做一个和原表一样的备份表?

create table new_table as(select * from old_table);

59.请问如何修改一张表的主键?

alter table aaa drop constraint aaa_key;

alter table aaa add constraint aaa_key primary key(a1,b1);

60.改变数据文件的大小?

用 ALTER DATABASE....DATAFILE....;

手工改变数据文件的大小,对于原来的 数据文件有没有损害。

61.怎样查看ORACLE中有哪些程序在运行之中?

查看v$seion表

62.怎么可以看到数据库有多少个tablespace?

select * from dba_tablespaces;

72.怎样查看哪些用户拥有SYSDBA、SYSOPER权限?

SQL>conn sys/change_on_install –登不上去

SQL>select * from V_$PWFILE_USERS;76.如何显示当前连接用户?

SHOW USER

77.如何查看数据文件放置的路径 ?

col file_name format a50

SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

79.如何改变一个字段初始定义的Check范围?

SQL> alter table xxx drop constraint constraint_name;

之后再创建新约束:

SQL> alter table xxx add constraint constraint_name check();

83.如何执行脚本SQL文件? SQL>@所在的文件路径 /filename.sql;例如放在E盘的根目录下则应该是 @E:a.sql;回车就OK了。

84.如何快速清空一个大表?

SQL>truncate table table_name;

85.如何查有多少个数据库实例?

SQL>SELECT * FROM V$INSTANCE;

86.如何查询数据库有多少表?

SQL>select * from all_tables;

87.如何测试SQL语句执行所用的时间?

SQL>set timing on;

SQL>select * from tablename;

89.字符串的连接

SELECT CONCAT(COL1,COL2)FROM TABLE;

SELECT COL1||COL2 FROM TABLE;

90.怎么把select出来的结果导到一个文本文件中?

SQL>SPOOL C:ABCD.TXT;

SQL>select * from table;

SQL >spool off;

91.怎样估算SQL执行的I/O数 ?

SQL>SET AUTOTRACE ON;

SQL>SELECT * FROM TABLE;

OR

SQL>SELECT * FROM v$filestat;

可以查看IO数

92.如何在sqlplus下改变字段大小?

alter table table_name modify(field_name varchar2(100));

改大行,改小不行(除非都是空的)

93.如何查询某天的数据? select * from a where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd');若是date型数据

insert into bsyear values(to_date('20130427','yyyymmdd'));或者是insert into bsyear values('27-4月-2013');

94.sql 语句如何插入全年日期?

create table BSYEAR(d date);insert into BSYEAR select to_date('20030101','yyyymmdd')+rownum-1 from all_objects where rownum

紧急插入几条重要的:

如何在Oracle中复制表结构和表数据 1.复制表结构及其数据:

create table table_name_new as select * from table_name_old 2.只复制表结构:

create table table_name_new as select * from table_name_old where 1=2;或者:

create table table_name_new like table_name_old 3.只复制表数据: 如果两个表结构一样:

insert into table_name_new select * from table_name_old 如果两个表结构不一样:

insert into table_name_new(column1,column2...)select column1,column2...from table_name_old 创建带主键的表:

create table stuInfo(stuID int primary key,stuName varchar2(20),age int);或是不直接增加主键

alter table stuInfo add constraint stuInfo _PK primary key(stuID)

95.如果修改表名?

alter table old_table_name rename to new_table_name;

97.如何知道用户拥有的权限?

SELECT * FROM dba_sys_privs;--一个权限对应一条数据,这样对于同一个用户就有多条数据了。

98.从网上下载的ORACLE9I与市场上卖的标准版有什么区别?

从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于商业用途,否则侵权。

101.如何搜索出前N条记录?

SELECT * FROM empLOYEE WHERE ROWNUM

104.如何统计两个表的记录总数?

select(select count(id)from aa)+(select count(id)from bb)总数 from dual;--总数那是没有单引号的,双引号可以。

106.如何在给现有的日期加上2年?(

select add_months(sysdate,24)from dual;--2015/4/27 9:28:52

110.tablespace 是否不能大于4G?

没有限制.111.返回大于等于N的最小整数值?

SELECT CEIL(N)FROM DUAL;

112.返回小于等于N的最小整数值?

SELECT FLOOR(N)FROM DUAL;

113.返回当前月的最后一天?

SELECT LAST_DAY(SYSDATE)FROM DUAL;

;

115.如何找数据库表的主键字段的名称?

SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';--我没有查出来。

116.两个结果集互加的函数?

SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;

117.两个结果集互减的函数?

SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;

139.如何查找重复记录?

SELECT * FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID)FROM TABLE_NAMe WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

140.如何删除重复记录?

DELETE FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID)FROM TABLE_NAME D WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

162.如何知道表在表空间中的存储情况?

select segment_name,sum(bytes),count(*)ext_quan from dba_extents where tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;--把&tablespace_name改成相应的表空间名称。

oracle端口号(共4篇)

Oracle 数据库性能优化

oracle dba 岗位职责(共10篇)

实习报告,.

实习报告-

本文标题: oracle实习报告
链接地址:https://www.dawendou.com/shiyongwen/shixibaogao/312684.html

版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《oracle实习报告》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

重点推荐栏目

关于大文斗范文网 | 在线投稿 | 网站声明 | 联系我们 | 网站帮助 | 投诉与建议 | 人才招聘 | 网站大事记
Copyright © 2004-2025 dawendou.com Inc. All Rights Reserved.大文斗范文网 版权所有