第一篇:oracle实习报告
实验四数据更新与视图
一、实验目的1、掌握数据更新语句的使用;
2、掌握视图操作的基本方法和应用,理解基于视图的查询和数据更新操作的过程。
二、实验内容及其对应的SQL语句
1.在实验二创建的表中使用SQL语句完成以下操作:
(1)现有一供应商,代码为S9、姓名为英特尔、所在城市西安,供应情况如下:供应零件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语句。
第二篇:Oracle安装报告
Oracle 安装报告
安装Oracle 10g 数据库
步骤:
1、先装虚拟机
2、在虚拟机中装一个windows xp 操作系统
3、安装数据库Oracle 10g 在windows xp 中(注意安装时的细节)
注释:由于Oracle 10g 数据库卸载比较麻烦,所以我们选择在虚拟机中安装 虚拟机的安装:
从官网上下载一个虚拟机,然后进行安装,根据提示一步一步的安装,最后完成。Windows xp 的安装:
在虚拟机中找到windows 镜像的路径,点击确定。然后运行,进行安装。分配空间时,不能分的太小,不然Oracle 会跑步起来,硬盘分配不能低于10G,内存不能少于256MB。系统安装完毕以后,在安装一个小工具,就是Vmare Tools 工具,装上这个工具就可以从我们的电脑上拷贝数据了。Oracle 10g 安装:
先把数据库安装文件拷贝到虚拟机中,然后在进行安装。安装时会遇到很多问题,一定要仔细对待。本数据库安装会默认三个用户:sys(默认密码change_on_install)、system(默认密码manager)、scott(默认密码tiger)。默认数据库orcl 在密码设置的时候,首字母必须是英文字母,不能为数字。路径的设置也要注意。安装完成以后,进行测试一下,点击sqlplus,进入这个界面,出现一个登录界面,输入用户名System,你自己设置的密码 ******,主机字符串就不用管了,因为现在你就有一个数据库。进入以后若出现连接成功就说明Oracle 安装成功。心得体会:
在安装Oracle数据库的过程中,我也遇到了一系列的问题,通过询问老师和同学、查阅资料,最总得到了解决。自我感觉还可以,自己进行安装开发软件,从中能学到不少的东西,进而为以后的发展打下一定的基础。这样的话我们就会对这个产品更加彻底的了解了。
第三篇: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
#passwd 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/classes1
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 < disk1.cpio
#cpio –idmv < disk2.cpio
#cpio –idmv < disk3.cpio
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基础,更好的运用这些知识。体会到光看课本是不行的,必须付出实践,在实践中学习,在实践中增长知识才是最快的。实践能力是最重要的。
感想:通过这次实训,我明白实践是很重要的,是检验你学习知识的深度,学习的能力。做什么也不能急于求成,先做好先前准备,再着手安装。过程中出现问题是很正常的,要沉下心来分析出现的问题,针对问题找出解决的方法。
第四篇: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表对应的一行成绩记录。
查询到学号为101101、课程名为离散数学的学生成绩,在成绩文本框更改成绩,点击更新后数据库里的成绩就随之更改了,相应的总学分也会通过储存过程更改。
五、小结与体会
这次实习让我收获非常大。在oracle数据库方面,我又复习巩固了数据库创建、表格创建、视图、触发器、储存过程、完整性约束等方面知识。而且更加深刻认识到这些知识在实际应用中的作用。在前台方面,第一次使用VB 6.0写前台程序,虽然具体设计和代码大多都是参考书上的讲解,但是,我还是学会了很多东西,特别是前台设计的思路。
在实习过程中我也遇到过很多问题。比如,在刚开始使用VB 6.0时,我一直无法实现和数据库关联。我明明是按照书上的代码来操作的,但是还是实现不了相应的功能。后来我通过上网查资料、和同学探讨等方式,终于明白原来是机房的电脑配置中出了点问题。在修改过一个配置文件后,我终于能让前台和数据库链接上了,仅这一个问题就花费了我一上午的时间,但是能够顺利解决让我感到非常兴奋。我觉得实习的意义就在于在犯错和解决错误的过程中成长。这种通过上网查资料、和小伙伴讨论的过程,也是提升自我学习能力的途径。所以,虽然过程比较艰辛,但是还是蛮开心的。
最后,我感觉在我完成的这个学生成绩管理系统中还存在一些设计不够合理的地方,一些功能也不够优化。但是限于目前知识水平有限、时间比较紧,只能先这样提交。但是我会利用以后的课余时间继续完善这个学生成绩管理系统的。学习就是在不断地完善中进步的嘛。
第五篇: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 session 权限,赋予权限的语法 grant 权限名 to 用户; grant create session 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 session 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 session。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<100),--也可以用varchar ;age between 10 and 100 ,在10和100之间,是一个闭区间 tel number(15)unique not null,--唯一约束,address varchar2(200)default '什么鬼')
insert into stuInfo values(3,'大大','男',18,4321543,default);insert into stuInfo values(1,'张三','男',10);select *from stuInfo;
drop table stuInfo;
create table classInfo(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 classInfo(cid)on delete cascade)insert into classInfo values(1,'1班');insert into classInfo values(2,'2班');insert into classInfo values(3,'3班');insert into classInfo values(4,'4班');
select *from classInfo;select *from stuInfo;
insert into stuInfo values(1001,'张三',2);insert into stuInfo values(1002,'张四',4);
update classInfo set cid=1 where cid=8;
drop table stuInfo;--要先删除这个 drop table classInfo;--再删除这个
delete classInfo where cid=4;--同时删除这两个表中的4
--删除用户的时候
drop user yc1 [cascade]--删除用户的同时把它创建的对象都一起删除
--修改表
--
1、添加表中字段
--alter table 表名 add 字段名 类型
alter table classInfo add status varchar2(10)default '未毕业'
--
2、修改已有字段的数据类型
--alter table 表名 modify 字段名 类型 alter table classInfo modify status number(1)
--
3、修改字段名
--alter table 表名 rename column 旧字段名 to 新的字段名 alter table classInfo rename column cname to 班级名;
--
4、删除字段--alter table 表名 drop column 字段名 alter table classInfo drop column status;
--
5、修改表名
--rename 旧表名 to 新表名 rename classInfo to 班级信息;
--删除表
--
1、截断表效率高,每删除一次会产生一次日志
2、截断会释放空间,而delete不会释放空间
--删除表结构和数据 drop table 表名;--删除表中所有数据 truncate table classInfo;delete classInfo;
create table classInfo(cid int primary key,--班级id cname varchar2(20)not null unique ,--班级名 stasuts varchar2(100));select *from classInfo;
--数据的操作
--增加数据语法
--insert into 表名[(列名,....)] values(对应的数据的值);
insert into classInfo values(1,'一班','未毕业');--需要按照表结构的顺序插入 insert into classInfo values(4,'六班','未毕业');insert into classInfo(cname,cid)values('二班',2);--需要按照括号中的顺序插入,但是 not null primary key 必须插入的。
insert into classInfo(cname,cid)values('三班',3);
--删除的语法
--delete 表名 [where 条件] delete classInfo where cid>=2;
--修改记录的语法
--update 表名 set [字段='值' ] [where 条件] update classInfo set cname='三班';--会修改所有该字段 update classInfo set cname='四班' where cid=1;update classInfo set cname='五班', stasuts ='未毕业' where cid=3;
--alter table classInfo drop constraint SYS_C0011213;
--添加多个时可以使用序列--用序列来做自动增长
create sequence seq_classInfo_cid start with 1001 increment by 1;
insert into classInfo values(seq_classInfo_cid.Nextval,'七班','未毕业');insert into classInfo values(seq_classInfo_cid.Nextval,'八班','未毕业');insert into classInfo values(seq_classInfo_cid.Nextval,'九班','未毕业');insert into classInfo values(seq_classInfo_cid.Nextval,'十班','未毕业');
create table classInfo2(cid int primary key,--班级id cname varchar2(20)not null unique ,--班级名 stasuts varchar2(100));select *from classInfo2;drop table classInfo2;
insert into classInfo2 select *from classInfo;insert into classInfo(cname,cid)select cname,cid from classInfo;alter table classInfo2 drop constraint SYS_C0011213;
select seq_classInfo_cid.nextval from dual;select seq_classInfo_cid.Currval from dual;
--直接创建一个新表,并拿到另一个表其中的数据 create table newTable as select cname,cid from classInfo;create table newTable1 as select *from classInfo;
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 sal<=1500 and comm is null;select *from emp where not(sal >1500 or comm is not null);--工资大于1500但是小于3000的
select *from emp where sal>1500 and sal<3000;select *from emp where sal between 1500 and 3000;--between是闭区间,是包含1500和3000的
--时间区间
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 <6;
--pagesize 5 select *from(select rownum rw,a.* from(select *from emp)a where rownum <16)b where b.rw>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 < 10 loop dbms_output.put_line(pnum);pnum := pnum + 1;end loop;end;
--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 password;//建用户名和密码oracle ,oracle
2.grant connect,resource,dba to username;//授权 grant connect,resource,dba,sysdba to username;
3.connect username/password//进入。
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$session表 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 <= to_char(to_date('20031231','yyyymmdd'),'ddd');--在表后直接插入365行数据日期。 紧急插入几条重要的: 如何在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 < n ORDER BY empno;Select * from a 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改成相应的表空间名称。