您的位置:首页 > 数据库 > Oracle

Oracle9i实验指导

2017-04-28 18:53 204 查看

实验环境及说明

(1) 本指导手册是在以下实验环境下完成的:

l Windows XP/NT/Server/Win7(32位Windows);

l Oracle 9.2(9.2.0.1.0),包括:

² Oracle企业管理器(Oracle Enterprise Manager—OEM,Windows)

² SQL Plus(DOS)、SQL Plus(Windows)、SQL
Plus WorkSheet(Windows)

² 数据库配置助手(Database Configuration Assistant--DBCA)

² 导入与导出工具(IMP / EXP,DOS),Oracle Net Manager(Net配置与测试工具)

² Oradim(Oracle服务的启停、创建、修改、删除工具,DOS)

² LsnrCtl(Listener监听器的启动、关闭、及查看监听状态,DOS)

² TnsPing(从客户端到Oracle监听服务的ping网络工具,DOS)

l 第三方工具:PL SQL Developer 10.0.5

(2) 手册中DOS环境下运行的Oracle工具在Unix环境下的用法相同,除了Unix命令与DOS命令不同;

(3) 本手册可适用于Oracle 8、9、10、11等版本,主要区别在于OEM工具;Oracle从10.0版本开始推荐采用Web版OEM;Oracle
8、9、10等提供了Windows版的OEM,Oracle
9、10、11等提供了Web版的OEM;另外,Oracle不同版本的安装目录有所不同;

(4) 示例中,OracleHome名--Ora92Home,SID名--Ora92LSH;实验时,请根据实验机相应名称进行替换;

(5) 开放机房的Windows系统具备还原功能,即Windows重启后,Oracle也被还原,故会丢失实验的操作结果,请同学们注意;但同时,也可放心大胆地进行实验;

1. 实验一 Oracle基础(验证型2学时)

1.0 实验目的与实验内容

Ø 实验目的

(1) 学习并掌握Oracle服务与Oracle监听服务的启停方法;

(2) 学习并掌握Oracle Net的配置方法;

(3) 学习OEM的操作及相关概念:连接(登录)、断开连接,表(及约束)的新建和修改操作,记录的插入、删除、修改等操作;了解“显示SQL |
隐藏SQL”按钮的作用,了解表的存储参数,理解表与方案(即用户)、表空间之间的关系;

Ø 实验内容

(1) 配置Oracle Net,启动OracleService和Oracle Listener服务;

(2) 使用OEM以SYSDBA登录Oracle,创建表空间STU_TBS,创建用户STUADMIN,然后以STUADMIN用户名登录,创建表Student并录入几条记录数据,将以上操作的SQL语句复制到stu.sql文件中;

(3) 2人一组,相互配置连接到对方Oracle服务器的服务命名,并通过OEM工具连接到对方服务器;进一步明确Oracle服务器与Oracle客户端的概念。

1.1 启动、停止Oracle服务

(1)控制面板--启停Oracle服务和Listener监听服务

*Oracle服务:“控制面板à管理工具à服务àOracleService<SID>”,启动|停止

**注:其中<SID>为本机Oracle的SID名,上例服务名如OracleServiceOra92LSH

*Oracle监听服务:“控制面板à管理工具à服务àOracle<OraHome>Listener”,启动|停止

**注:1>
Oracle<OraHome>Listener如OracleOra92HomeListener;2>
监听服务程序需要读取配置文件listener.ora中的参数,当参数有错误时,启动监听会失败,参见1.2节“配置监听”;3>
当修改listener.ora后,监听程序可能会停止运行,需重启。

(2)DOS命令下--启停Oracle服务及Listener监听服务

*启动DOS:“开始菜单à程序à附件à命令提示符”,或“开始菜单à运行àCMD”,出现DOS窗口,其提示符如:C:\Users\Administrator>

CD命令可切换当前目录,如:

C:\Users\Administrator>CD \

C:\>

*启动Oracle服务

C:\Users\Administrator>oradim -startup –sid Ora92LSH

*停止Oracle服务

C:\Users\Administrator>oradim –shutdown –sid Ora92LSH

*注:OraDim(DOS/Unix命令行工具)还具有Oracle服务的创建、修改、删除等功能

*启动Listener监听服务

C:\Users\Administrator>lsnrctl start

-- 下面用tnsping工具检查Listener监听,看能否ping通

C:\Users\Administrator>tnsping ora92Lsh

*停止Listener监听服务

C:\Users\Administrator> lsnrctl stop

C:\Users\Administrator>tnsping ora92Lsh

*查看Listener监听服务状态

C:\Users\Administrator> lsnrctl status

*进入LsnrCtl程序(监听的控制器)

C:\Users\Administrator> lsnrctl

LSNRCTL>Help --
帮助

LSNRCTL>start --
启动监听

LSNRCTL>stop --
停止监听

LSNRCTL>status --
查看监听状态

LSNRCTL>exit --
退出程序

C:\Users\Administrator>

*注:LsnrCtl(DOS/Unix命令行工具)具有Oracle监听服务的启动、停止、查看状态等功能;

TnsPing(DOS/Unix命令行工具)可在客户机上检查到Oracle服务器的网络是否通(即网络的ping操作),并检查Listener监听服务是否启动。

1.2 配置Oracle Net

Oracle Net Manager为Oracle客户端工具。

*启动Net程序:“开始菜单à程序àOracleàConfiguration and Migration ToolsàNet Manager”

*配置监听:“本地à监听程序àLISTENER”,“监听位置à地址2”,其3个参数如下:

协议:TCP/IP

主机:<本机名>
或 <本机IP地址>;本机名在“我的电脑à属性à计算机名”中查看

端口:1521 或
<其它端口>;1521为Oracle的默认端口

**注:修改Listener配置并保存后,Oracle监听服务会停止运行,需重启监听程序。

*添加服务命名:选中“本地à服务命名”,点击按钮“+”;注:可添加远程Oracle服务。

*修改服务命名:“本地à服务命名à<XXX>”,服务命名的4个参数如下:

服务名 | SID:填写Oracle服务的<服务名>或<SID>

协议:TCP/IP

主机名:填写Oracle服务器的<计算机名>
或 <IP地址>;远程服务命名最好填写IP

端口:填写Oracle服务器的<监听器端口>,默认端口:1521

**注:配置本地和远程Oracle服务命名的方法相同。

*删除服务命名:选中“本地à服务命名”,点击按钮“X”;

*保存配置:“文件à保存网络配置”,配置参数被保存到下列2个纯文本文件中:

LISTENER参数文件:<Oracle安装目录>\network\admin\listener.ora

服务命名参数文件:<Oracle安装目录>\network\admin\tnsnames.ora

**注:Oracle早期版本直接修改这2个文件进行配置,Oracle8以后不推荐这么做。

*测试服务命名:选择“本地à服务命名à<XXX>”,点击按钮“”;“连接测试”窗口按钮:

更改登录:用于测试的Oracle账号,默认账号/密码为“SCOTT/TIGER”,可更改;

测试:点击后开始测试,尝试用上述账号连接Oracle服务器。

**注:测试连接前,应该保证Oracle服务和Oracle监听服务等2个程序处于运行状态,并且账号和密码有效。

1.3 Oracle企业管理器(OEM)

Oracle客户端工具。Oracle 8i和9i为Windows界面,而Oracle10g~11g为Web界面。

**注:在Oracle10.2客户端安装包中提供了Windows界面的OEM工具。

(1)启动OEM

*启动OEM:“开始菜单àOracleà Oracle Enterprise Manager Console”;

(2)添加数据库

*添加数据库:“导航器à网络à数据库<右>à将数据库添加到树”;添加Net中的服务命名

注:可添加多个Oracle数据库,包括本地和远程;建议先在Oracle Net中添加服务命名。

(3)登录数据库

*登录数据库(连接):“导航器à网络à数据库à<服务名><右>à连接”;连接身份说明如下:

Normal: 正常身份登录,非管理员模式;

SysOper:以数据库系统操作员身份登录,可进行Oracle服务器的起、停,数据库的装载、打开及数据库备份、恢复、日志归档等工作;

SysDBA: 以数据库系统管理员身份登录,可进行Oracle服务器的起、停,数据库的装载、打开,数据库的备份、恢复、日志归档,设置字符集,数据库的创建、销毁等工作。

**注:SysDBA、SysOper只能在Oracle服务器本机登录,不能登录远程Oracle服务器?

*SYS登录:在Oracle服务器本机上,不输人用户和密码,选择SYSDBA身份直接登录。

*断开连接:“导航器à网络à数据库à<服务名><右>à断开连接”

(4)创建表空间STU_TBS

*新建表空间:“导航器à网络à数据库à<服务名>à存储à表空间<右>à创建”,名称栏输入STU_TBS,点击“显示SQL”并将SQL脚本复制到stu.sql文件,再点击“创建”;

**请注意领会表空间的状态、类型、存储等参数的含义及作用。

*”显示SQL”按钮:显示该窗口操作的所有SQL语句脚本,可以复制出来,先全选(Ctrl+A),再复制(Ctrl+C),然后粘贴(Ctrl+V)到其它文件中;

(5)新建用户STUADMIN

*新建用户:“导航器à网络à数据库à<服务名>à安全性à用户<右>à创建”;

一般信息:填写名称(STUADMIN)、口令,选择默认表空间(STU_TBS)、临时表空间(TEMP)、状态(未锁定);

角色:选择角色CONNECT、RESOURCE,选入按钮,去选按钮;

系统:选择系统权限SELECT ANY DICTIONARY,该权限可查询所有字典表(系统信息);

显示SQL:将SQL文本复制复制到stu.sql文件,阅读并理解文本内容;

创建:点击“创建”按钮。

*修改用户:“导航器à网络à数据库à<服务名>à安全性à用户àSTUADMIN”

*请修改SYS、SYSTEM用户的密码,并尝试分别使用SYS、SYSTEM、SCOTT账号登陆

(6)创建学生表Student,并对其数据进行维护

*建表:OEM程序菜单“对象à创建”,创建窗口 “<服务名>à表(选中),à使用向导(去选),à创建”,创建表窗口操作如下:

一般信息:填写表名(Student),字段名、类型、长度、可空、默认值等;选择方案(STUADMIN)、表空间(STU_TBS)

约束:主键Primary key、唯一键Unique、外键Foreign key、Check约束等设置方法

*修改表:“导航器à网络à数据库à<服务名>à方案àSTUADMINà表à Student”

*编辑表记录:“导航器à网络à数据库à<服务名>à方案àSTUADMINà表àStudent<右>à查看/编辑目录”,进入“表编辑器”窗口

**注:方案(Scheme)名一般就是用户(User)名,表示该用户所拥有的表、视图、索引、同义词、序列、簇、触发器、过程、函数、包、包体、数据库链等所有数据库对象。

2. 实验二 SQL Plus基础知识(综合型 4学时)

2.0 实验目的与实验内容

Ø 实验目的与实验内容

(1) 了解SQL Plus基本功能、相关概念;(参见2.1节)

(2) 学会SQL Plus(DOS)的启动(sqlplus)与退出(exit/quit)、连接(connect)与断开连接(disconnect)、显示登录用户名(show
user)、帮助(Help)等命令的使用;(参见2.2节)

(3) 学会编辑(行编辑命令:List、Change、Append、Input)与执行SQL语句;(参见2.2节)

(4) 学会事务的控制(隐式事务、自动提交事务);(参见2.2节)

(5) 学会使用SQL脚本文件、SPOOL假脱机及格式化导出表数据;(参见2.2节)

(6) 学会日期格式会话级设置,及insert日期值的方法;(参见2.2节)

(7) 学习SQL Plus(Windows)和SQL Plus Worksheet的使用,了解3种SQL
Plus程序间的异同;(参见2.3-2.4节)

2.1 SQL Plus功能与相关概念简介

SQL Plus为Oracle客户端程序,其功能与OEM相同,是Oracle的常用工具。有4个版本的程序:DOS下运行的SQL
Plus,Windows下运行的SQL Plus和SQL
Plus Worksheet,以及Web下运行的iSQL Plus等。

(1) SQL Plus可以运行所有的SQL语句

包括DDL、DML、DCL等SQL语句,如:Create、Alter、Drop、Select、Insert、Delete、Update、Grant、Revoke、Commit、Rollback等。

可以执行PL/SQL块。

(2) SQL Plus命令(参见《附录2 SQL Plus常用命令》)

SQL Plus有一套自己的命令,以及SQL缓冲区、环境变量等概念。SQL Plus命令在客户端SQL
Plus中执行,而不是在Oracle服务器端运行。

(3) SQL缓冲区

SQL缓冲区用于存放当前待执行的SQL语句或PL/SQL块,而SQL
Plus命令不被保存;

可进行编辑(行编辑),如List、Append、Input、Change、Del、Edit、Get、Save等命令;

当前行:当前编辑的文本行;

可采用外部操作系统的文本编辑器,如Edit、Get、Save等命令。

(4) 环境变量(68个)

反映SQL Plus的执行环境与状态,使用Set命令可改变其当前值,Show命令可查看。

(5) 连接、断开Oracle连接—Connect、Disconnect命令

(6) Oracle数据库的启动、停止,归档、备份、恢复

Startup、Shutdown命令—启动、停止Oracle数据库;

Archive命令—归档模式的设置、查看,进行日志归档等操作;

Host命令—执行操作系统(DOS命令),使用DOS的Copy命令可对数据库进行备份与恢复

(7) 可执行SQL脚本文件—Start/@命令

SQL脚本文件可以包括SQL Plus命令和SQL语句。SQL脚本文件内的常用命令有:

Define、Accept命令—宏变量的定义、键盘输入;

Print命令—输出变量值;

(8) 调用存储过程

Variable命令—定义存储过程时的IN/OUT变量,也称为宿主变量/Bind变量;

Exec命令—调用存储过程;

Print命令—输出Out变量的值;

(9) 假脱机输出—SPOOL命令

可将执行的SQL语句及其执行结果输出到文本文件或打印机中;

(10) 执行DOS操作系统命令—Host命令

(11) 联机帮助—HELP命令

可查看所有SQL Plus命令的完整语法;

2.2 SQL Plus(DOS)

(1)启动、退出SQL Plus

下表为启动SQLPlus命令的例子,进入SQL Plus后,提示符为“SQL>”

命令例子
说 明
C:\> sqlplus

启动SQL Plus,提示输入用户名和密码

C:\> sqlplus scott

启动SQL Plus,提示输入用户scott的密码

C:\> sqlplus scott/tiger

启动SQL Plus,并以Scott账号和tiger密码连接本地数据库;

C:\> sqlplus scott/tiger@ora92lsh

启动SQL Plus,并以Scott账号连接到本地或远程ora92lsh数据库;

C:\> sqlplus "/as sysdba"

SQL>show user

启动SQL Plus,以SYSDBA身份连接本地Oracle;

显示连接的用户名,此时为SYS。

C:\> sqlplus /nolog

SQL>show user

SQL>connect scott/tiger

不连接而直接启动SQL Plus

此时,用户名为空,表示未连接

再以Scott用户连接本地Oracle数据库

C:\> sqlplus scott/tiger@ora92lsh @D:\abc

以Scott账号连接ora92lsh数据库,进入SQL Plus后,立即运行D:\abc.sql脚本文件

SQL> EXIT

退出SQL Plus

SQL> QUIT

退出SQL Plus

(2)连接、断开连接

进入SQL Plus后,可以用Connect命令连接、Disconnect命令断开连接;

命令例子
说 明
SQL>connect

连接数据库,提示输入用户名和密码

SQL>connect scott

连接数据库,提示输入用户scott的密码

SQL>connect scott/tiger

以scott用户和密码tiger连接数据库

SQL>connect scott/tiger@ora92lsh

以Scott账号连接到ora92lsh数据库

SQL>connect system/manager@ora92lsh as sysdba

以SYSDBA身份连接ora92lsh数据库

SQL>connect /@ora92lsh as sysdba

以SYSDBA身份连接本地ora92lsh数据库

SQL>connect / as sysdba

以SYSDBA身份连接本地数据库

SQL> disconnect

断开连接,此状态下,不能执行SQL语句

(3)联机帮助

帮助命令(HELP / ?)可以查询所有SQL Plus命令的语法格式,但必须在连接状态下使用;

HELP例子
说 明
SQL> help connect

SQL> ? connect

查询connect命令的语法格式

(同上)

SQL> help c

查询以c开头的所有命令的语法格式

SQL> help sqlplus

查询启动SQL Plus命令的语法格式

(4)执行SQL语句

执行SQL语句之前,应先连接Oracle;注:SQL语句必须以“;”结束,而命令不需要;

命令与SQL语句例子
说 明
SQL> select * from scott.emp;

SQL> LIST

SQL> RUN

SQL> /

查询用户SCOTT的表EMP(职员);注:SQL语句会被存入SQL缓冲区;

显示当前SQL语句,即显示SQL缓冲区内容;

显示并执行当前SQL语句

执行当前SQL语句

SQL> desc scott.emp

查询表scott.emp的结构信息

SQL> select *

2 from scott.emp;

SQL> L2

SQL> I where deptno=20

SQL> L

SQL> R

SQL> A order by ename

SQL> L

SQL> R

SQL> L2

SQL> C/emp/dept/

SQL> L

SQL> Del 3

SQL> L

案例:显示和编辑SQL缓冲区

查询用户SCOTT的表EMP,注:语句可分多行(以;结束),此时从第2行开始显示行号;

List 2命令的缩写,显示SQL缓冲区第2行,并设置为当前行(*),此时可编辑该行

Input命令,在当前行后插入一新行:’where deptno=20’

List的缩写,显示SQL语句每行行号及内容

Run的缩写

Append命令,在当前行尾部追加’ order by ename’

List命令

Run命令

List 2命令

Change命令,将当前行中的emp替换为dept

List命令

删除第3行

List命令

SQL> select * from scott.emp;

SQL> edit

SQL> L

输入一条SQL语句

调用DOS全屏幕编辑器(默认为记事本)修改SQL缓冲区,然后保存(保存到默认文件),注意:请别删除最后的“/”命令行;

List,查看SQL缓冲区中的SQL语句

SQL> set timing on

SQL> select * from scott.emp;

SQL> set timing off

SQL> L

SQL> R

SQL> set feedback off

SQL> r

SQL> set feedback on

SQL> r

案例:返回SQL语句的执行时间和记录行数

设置返回并显示SQL语句执行时间,默认OFF

执行一条SQL语句,观察最后一行的提示信息

设置不返回和显示SQL语句执行时间

List,观察SQL缓冲区内容

Run,此时将不返回执行时间

设置不返回和显示记录行数

Run,请观察有无记录行数显示

设置返回和显示记录行数

Run,请观察有无记录行数显示

测试:如果执行了多条SQL语句和Sqlplus命令,SQL缓冲区保存的内容是什么?

(5)事务控制

SET AUTOCOMMIT ON | OFF 设置自动提交模式开关,默认为Off(关)状态

OFF:此时为隐私事务模式,即必须以Commit(提交)或Rollback(回滚)来结束事务,同时也意味着下一个事务的开始;当执行DDL语句或正常退出Sqlplus时(exit或quit命令),会隐含执行commit一次;

ON :此时为自动提交事务模式,即执行每条SQL语句时都会自动提交,也就是说将每条SQL语句作为一个事务,故此,你将没有反悔的机会。

命令与SQL语句例子
说 明
SQL> connect scott/tiger

SQL> set autocommit off

SQL> select * from emp where empno=7566;

SQL> update emp set sal=sal+100

2 where empno=7566;

SQL> select * from emp where empno=7566;

SQL> rollback;

SQL> select * from emp where empno=7566;

案例:隐式事务模式(撤销给员工涨工资操作)

以scott用户连接

关闭自动提交(默认),切换到隐式事务模式

查询职员号7566信息,记住SAL列的值

涨工资(SAL列)100元

再查询

回滚(撤销涨工资操作,或commit确认)

再查询,查看:工资SAL还原了吗?

SQL>set autocommit on



案例:自动提交事务模式

打开自动提交

然后再从上例第3条语句开始执行余下的语句

小技巧:可以使用edit命令,将SQL语句从其它地方复制并粘贴到SQL缓冲区;

(6)SQL脚本文件、SPOOL假脱机

*执行SQL脚本文件(Start/@
命令)

创建SQL脚本文件OraCreateTables.sql (内容参见《附录3 SQL脚本文件》),其作用为:创建学生、课程、选课等3张表,并插入若干记录(请观察各SQL语句语法);将该文件复制到C:\目录下,然后执行:

命令与SQL语句例子
说 明
SQL> connect scott/tiger

SQL> start C:\OraCreateTables.sql

SQL> desc student;

SQL> select * from student;

SQL> select * from course;

SQL> select * from sc;

以scott用户连接

执行脚本文件中的SQL语句

查看学生表结构

查询学生表记录

查询课程表记录

查询选课表记录

注:脚本中“/”行的作用等同与“;”,若SQL语句以“;”结束时,其后面就不要加“/”了,否则,SQLPLUS会将该SQL语句(存放在SQL缓冲区中)再执行一次。

思考:这3张表的所有者是谁?

*SPOOL假脱机输出

SPOOL命令基本用法,如下例:

命令与SQL语句例子
说 明
SQL> connect scott/tiger

SQL> spool c:\emp.txt

SQL> desc emp

SQL> select * from emp;

SQL> spool off

以scott用户连接

打开SPOOL,将命令与结果输出到c:\emp.txt文件中

查看scott.emp表结构

查询scott.emp表记录

关闭Spool输出,请用记事本打开c:\emp.txt文件,观察其内容

*案例:SPOOL格式化导出Oracle表数据,如下:

命令与SQL语句例子
说 明
SQL> connect scott/tiger

SQL> set trimspool on

SQL> set linesize 120

SQL> set pagesize 2000

SQL> set newpage 1

SQL> set heading off

SQL> set term off

SQL> spool c:\emp2.txt

SQL> select EMPNO || ',' || ENAME || ','

2 || to_char(HIREDATE,'YYYY-MM-DD')

3 || ',' || SAL

4 from emp;

SQL> spool off

以scott用户连接

去除重定向(spool)输出每行的拖尾空格

设置行宽为120个字符

设置每页行数为2000行

不输出域标题(字段名)

不显示脚本中的命令的执行结果

将命令与结果输出到c:\emp2.txt文件中

查询emp表部分字段数据,说明:||
为字符串连接运算符,数据之间以逗号分隔

关闭Spool输出,请用记事本打开文件c:\emp2.txt,观察其内容

练习:按上述内容编写成SQL脚本文件,用于格式化输出SCOTT.EMP表的全部数据

spool常用的设置:

set colsep ' ';//设置域输出分隔符,即字段之间的分隔符,如设为空格或逗号

set echo off;//是否显示start启动的脚本中的每个sql命令,缺省为on

set feedback off;//是否回显本次sql命令处理的记录条数,缺省为on

set heading off;//是否输出域标题,缺省为on

set pagesize 0;//输出每页行数,缺省为24,为了避免分页,可设定为0。

set termout off;//是否显示脚本中的命令的执行结果,缺省为on

set trimout on;//是否去除标准输出每行的拖尾空格,缺省为off

set trimspool on;//是否去除重定向(spool)输出每行的拖尾空格,缺省为off

练习:编写一个SQL脚本文件,把SQLPLUS运行环境设置成自己所喜欢的

(7)日期格式问题

一般我们在会话级(一次从连接到断开期间,称为一次会话)设置日期格式。

命令与SQL语句例子
说 明
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

SQL> select * from scott.emp;

SQL> alter session set nls_date_format='yyyy-mm-dd';

SQL> select * from scott.emp;

SQL> insert into scott.emp(empno,ename,hiredate,deptno)

2 values(8000,'ABC','2015-1-20',20);

设置日期格式

观察HireDate列的值

设置日期格式

观察HireDate列的值

插入一条记录,此时日期值可以这样用

SQL> insert into scott.emp(empno,ename,hiredate,deptno)

2 values(8001,'XYZ',to_date('2015-1-20','yyyy-mm-dd'),20);

SQL> select * from scott.emp;

一般插入日期值需要使用To_date()函数

查看结果

说明:会话级设置在断开连接后失效;

学习资料:参见“附录4”中的“表F3-3”与“表F3-4”。

进一步学习(2学时):参见http://blog.chinaunix.net/uid-25492475-id-3140218.html
或“ORACLE字符集.DOC”。

2.3 SQL Plus(Windows)

与DOS版的SQL Plus启动方式不同、界面不同,增加了菜单,其它功能及用法均一样。

*进入SQL Plus(Windows版):“开始菜单à程序àOracleàApplication
DevelopmentàSQL Plus”

2.4 SQL Plus Worksheet(Windows)

与Windows版的SQL Plus界面不同,功能、命令及SQL语句用法均一样。不同点:

(1) 从行编辑改成了全屏编辑,但SQL缓冲区、List、Change、Append、Input、Run等命令仍保留;

(2) SQL语句执行结果:在下方单独开辟了一个窗格进行显示

(3) 保留了SQL语句及命令的执行历史,可随时调入执行。

*进入SQL Plus Worksheet(Windows版):“开始菜单à程序àOracleàApplication
DevelopmentàSQL Plus Worksheet”

3. 实验三
启动与停止Oracle数据库(验证型 2学时)

3.0 实验目的与实验内容

Ø 实验目的

(1) 学习Oracle数据库的启动与停止命令;参见3.1节

(2) 了解数据库的启动过程,及参数文件、控制文件、数据库文件、日志文件的打开是在哪个阶段;

(3) 学习使用OEM启停Oracle数据库。

Ø 实验内容

(1) 使用Sqlplus进行数据库的启动与停止实验;参见3.2节

(2) 使用OEM进行数据库的启动与停止实验。参见3.3节

3.1 启动与停止ORACLE数据库

启动(startup)或停止(shutdown)Oracle数据库,应以SYSDBA/SYSOPER身份连接。

(1)SHUTDOWN命令格式:

SHUTDOWN [ NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ]

功能:关闭(Close)数据库,但不关闭Oracle服务及相关进程。

说明:

SHUTDOWN NORMAL:在命令执行期间,不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复;默认选项,等价于命令:SHUTDOWN。

SHUTDOWN TRANSACTIONAL:在命令执行期间,不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。

SHUTDOWN IMMEDIATE:在命令执行期间,不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。

SHUTDOWN ABORT:在命令执行期间,不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。

SHUTDOWN命令选项小结,见下表:

命令选项
新连接
等待会话结束
等待事务结束
做检查点
关闭数据文件
执行命令后数据库状态
下次启动时自动做实例恢复
NORMAL

不允许
等待
等待

关闭
Close
不需要
TRANSACTIONAL

不允许
不等待
等待

关闭
Close
不需要
IMMEDIATE

不允许
不等待
不等待

关闭
Close
不需要
ABORT

不允许
不等待
不等待
不做
不关闭
Close

(2)Oracle数据库的4种运行状态:

Close--数据库关闭,使用Shutdown后;

NoMount—数据库未装载,用于创建数据库的数据文件、重建控制文件;

Mount--数据库已装载,用于改变归档模式、修改控制文件、重做数据文件的名称和路径、数据库的备份和恢复;

Open--数据库打开,数据库可正常使用。

注:普通身份的用户是不能在 OPEN
之前登录的;SYSDBA是通过口令文件和操作系统验证,可以在OPEN之前登录。

(3)Oracle数据库的启动过程:

Oracle数据库的正常启动经历4个阶段:shutdown→nomount→mount→open

<1> shutdown→nomount过程:

读初始参数文件,按参数分配物理内存,启动后台进程,定位到控制文件,打开报警(alert)文件,记录启动过程;

Nomount状态只能访问与SGA区相关的动态性能视图:v$parameter、v$sga、v$option、v$process、
v$version、v$instance,这些视图与数据库无关。

<2> nomount→mount过程:

打开控制文件,确认数据库的结构信息,将数据库和实例关联在一起;

Mount状态可以访问与控制文件相关的动态性能视图:v$thread、v$controlfile、v$database、v$datafile、v$datafile_header、v$logfile;

以下任务必须在mount状态下进行:命名数据文件,启用和禁用重作日志归档选项,执行完全数据库恢复。

<3> mount→open过程:

打开数据文件,打开重做日志文件;

最后阶段中,oracle服务器验证所有数据文件和重做日志文件是否可以打开,并检查数据库的一致性,如果需要,smon进程会启动例程恢复。

(4)STARTUP命令格式:

STARTUP [ NOMOUNT | MOUNT | [OPEN [open_选项]]] [FORCE] [RESTRICT] [PFILE=filename]

其中 open_选项 为:READ {ONLY | WRITE [RECOVER]} | RECOVER

说明:

STARTUP NOMOUNT:启动数据库到NOMOUNT

STARTUP MOUNT:启动数据库到MOUNT

STARTUP OPEN:打开数据库

STARTUP:等价于 - STARTUP OPEN

STARTUP FORCE:中止当前数据库的运行(shutdown abort),并重新启动数据库(startup)

STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限(一般为DBA等特权用户)的用户访问数据库;这种方式常用来对数据库进行维护,如数据导入/导出操作时不希望有其他用户连接到数据库操作数据。

STARTUP PFILE=filename:以filename为初始化文件启动数据库,而不采用缺省初始化文件

STARTUP RECOVER:数据库启动,并开始介质恢复

(5)相关SQL语句
-- ALTER DATABASE

ALTER DATABASE MOUNT; --将数据库从nomount状态修改到mount状态

ALTER DATABASE OPEN; --将数据库从mount状态修改到open状态

ALTER DATABASE OPEN READ ONLY; --将数据库从mount状态修改到open只读状态

3.2 使用SQLPLUS命令启停Oracle数据库

命令例子
说 明
SQL> connect / as sysdba

SQL> SHUTDOWN IMMEDIATE

以SYSDBA身份连接

关闭Oracle数据库,在控制面板中查看Oracle服务,服务停止了吗?为什么?

SQL> SHUTDOWN IMMEDIATE

SQL> STARTUP NOMOUNT

SQL> ALTER DATABASE MOUNT;

SQL> ALTER DATABASE OPEN;

先关闭Oracle数据库(startup前需先关闭数据库)

启动本地Oracle数据库到NoMount

Mount装载数据库

Open打开数据库

SQL> STARTUP MOUNT

SQL> ALTER DATABASE OPEN;

启动本地Oracle数据库到Mount状态(需先关闭)

Open打开数据库

SQL> STARTUP OPEN

启动并打开本地Oracle数据库(需先关闭)

SQL> STARTUP OPEN Ora92LSH

启动本地Oracle数据库Ora92LSH(需先关闭)

请自行设计其它实验案例,以验证所学。如:

(1)另开一个sqlplus窗口,运行一个事务,在未结束事务时,实验各种shutdown命令;

(2)oracle实例在nomount或mount状态时,进行startup命令,结果会如何?

3.3 使用OEM工具启停Oracle数据库

(1)在Oracle服务器本机上启动OEM;

(2)以SYSDBA身份连接数据库;

(3)在“例程—>配置”中,勾选“显示所有状态”;

(4)勾选“例程状态”相应选项后,点击应用,以启动或停止数据库。

请验证:

(1)上面第2步,若使用Normal或Sysoper身份连接,可进行数据库的启停操作吗?

(2)在客户机(非Oracle服务器本机)上连接Oracle服务时,可否启停数据库?

4. 实验四 DBCA创建数据库(验证型
2学时)

4.0 实验目的与实验内容

Ø 实验目的

(1) 学习使用DBCA创建和数据库;

(2) 了解数据库的基本结构,进一步理解OracleHome、SID、Oracle数据库、Oracle服务、Listener服务、Oracle实例等相关概念;

Ø 实验内容

(1) 使用DBCA创建数据库OraABC;

(2) 在OraABC数据库中创建一个用户及该用户的一些数据库对象(可选做);

(3) 复制OraABC和原数据库(yangtzeu)数据库文件,给Oracle冷备份实验做准备;

(4) 使用DBCA删除数据库OraABC。

4.1 DBCA创建数据库

使用DBCA创建数据库OraABC,实验步骤如下:

(1) 打开DBCA:“开始菜单à程序àOracleàConfiguration and Migration ToolsàDatabase Configuration Assistant”;

(2) 进入“欢迎使用”窗口,查看DBCA的功能,单击“下一步”按钮;

(3) 选择“创建数据库”选项,单击“下一步”按钮;

(4) 选择“General Purpose”(通用型DB)选项,点击“显示详细资料”,查看信息后关闭详细资料窗口,单击“下一步”按钮;

(5) 在“全局数据库名称”文本框键入OraABC(SID让系统自动指派),单击“下一步”按钮;

(6) 选择“专用服务器模式”,单击“下一步”按钮;

(7) 进入“初始化参数”窗口,仔细查看“内存”、字符集、数据库大小、文件位置、归档等页的内容,及“所有初始化参数”、“文件位置变量”内容,不做修改(均采用默认值),单击“下一步”按钮;

(8) 进入“数据库存储”窗口,仔细查看Controfile、数据文件、重做日志组等内容和文件位置,不做修改,,单击“下一步”按钮;

(9) 进入“创建选项”窗口,勾选“创建数据库”,单击“完成”按钮;

(10) 弹出“概要”窗口,可查看详细配置,点击“确定”,开始创建数据库。

(11) 当数据库创建完成之后,可激活帐户SCOTT,并修改账户SYS和SYSTEM的密码。

观察与思考:

(1)安装过程中输入了“全局数据库名”(及SID),为何没有输入OracleHome名?

(2)进入控制面板à服务,观察:增加了哪些Oracle服务?而Listener不变,说明了什么?

(3)启动OraABC和原有数据库的Oracle服务,并打开Windows的任务管理器,查看有几个Oracle.exe进程?

(4)进入Oracle安装目录,观察下列目录有何变化?增加了哪些文件?

C:\ oracle\admin;

C:\oracle\ora92\database;
C:\oracle\ora92\dbs;

C:\oracle\oradata;

(5)进入Oracle Net Manager,查看有何变化?

(6)思考数据库OraABC与原有数据库的关系:

<1> 这2个数据库有不同的SID,但OracleHome和Listener均只有一个(说明这2个Oracle数据库共用一套Oracle程序?);

<2> 这2个数据库相互独立,有各自的数据字典(系统表)、用户、数据库对象、表空间、数据文件、日志、控制文件等;在Oracle Net配置、数据库启停、连接等方面也相互无关。

(7)请思考OracleHome与SID概念的含义,理解Listener的作用。

4.2 使用数据库OraABC(可选做)

(1)在OraABC中创建一个表空间

(2)创建一个用户

(3)创建若干表

4.3 复制数据库文件

为实验5(oracle冷备份)做准备:请先shutdown关闭数据库OraABC和原数据库Ora92LSH(4#-5楼机房:yangtzeu),再将C:\oracle\admin;
C:\oracle\ora92\database; C:\oracle\ora92\dbs; C:\oracle\oradata等4个目录及其下的所有文件复制下来。

4.4 删除数据库

使用DBCA删除数据库OraABC。

5. 实验五 Oracle数据库冷备份(验证型
2学时)

5.0 实验目的与实验内容

Ø 实验目的

(1) 学习Oracle数据库冷备份的方法与备份内容;

(2) 了解数据库冷备份的恢复(还原)方法;

Ø 实验内容

(1) 先在现有数据库中创建一些对象,以便在数据库还原后进行验证;

(2) Oracle数据库冷备份;

(3) 利用冷备份文件进行Oracle数据库恢复,并进行验证。

5.1 Oracle冷备份与恢复所需要的条件

(1)oracle数据库导出时候的条件,在恢复时都必须具备;

(2)恢复时,需要一个版本号完全一样的oracle安装盘,包括小版本号;(以防Oracle被破坏)

(3)恢复时,要有与服务器一样的操作系统,包括补丁;

(4)在数据库服务器上,实例是被shutdown情况下拷贝的;

(5)要拷贝全部的参数文件、控制文件、数据文件、日志文件;如果漏拷文件,下次再拷贝,需要全部的重新拷贝一次;不需要拷贝oracle实例的归档日志,不需要拷贝oracle的支持文件。

5.2 Oracle数据库冷备份

*工作内容如下:

(1)查询并记录:OS版本号、OS补丁,Oracle版本号(包括小版本号,如:9.2.0.1.0),Oracle安装目录,语言及字符集,Oracle
Home名,SID名;

(2)查询并记录:参数文件、控制文件、数据文件、日志文件等的目录及文件名,ADMIN目录;

(3)shutdown停止数据库;

(4)复制上述2中的所有文件。

*Sqlplus操作步骤(以oracle 9.2.0.1.0为例):

(1) 以SYSDBA身份连接到要备份的Oracle数据库实例;

(2) 查询Oracle数据库实例名:

SQL>select name from v$database;

(3) 查询控制文件位置:

SQL>select name from v$controlfile;

(4) 查询数据文件位置:

SQL>select name from v$datafile;

(5) 查询重做日志文件位置:

SQL>select member from v$logfile;

(6) 查询spfile<SID>.ora(或spfile.ora或pfile.ora)参数文件位置:

SQL>show parameter spfile

或:

SQL>show parameter pfile

上面结果表示:

C:\oracle\ora92\database\SPFILEORA92LSH.ORA

Oracle目录与名称表示法如下:

Oracle表示法
含义
本手册实验环境对应名
你的实验环境是?
%ORACLE_BASE%

Oracle安装目录

C:\oracle

%ORACLE_HOME%

OracleHome目录

C:\oracle\ora92

%ORACLE_NAME%

Oracle实例名称

Ora92LSH

%ORACLE_SID%

Oracle SID名

Ora92LSH

(7) 查找Init<SID>.ora参数文件位置,一般与spfile<SID>.ora文件在同一目录下,Oracle 9.0后init文件可被spfile文件所取代

注:Spfile、pfile、init文件一般在以下目录找:

<oracle安装目录>\database,如:C:\oracle\ora92\database

<oracle安装目录>\dbs,如:C:\oracle\ora92\dbs

(8) 查看ADMIN目录下的所有目录及文件,如:C:\oracle\admin

(9) 停止Oracle数据库

SQL>shutdown immediate

(10) 将查找的上述所有文件(包括ADMIN目录)一次拷贝完成

*spfileSID、spfile、pfile、initSID与Oracle数据库启动(startup
nomount)顺序:

<1> 首先是使用服务器上的spfile<SID>文件启动实例;

<2> 如果没有找到spfile<SID>就是用默认的spfile文件启动;

<3> 如果又没找到默认的spfile文件就使用服务器上的init<SID>文件启动实例;

<4> 若没有找到init<SID>就找服务器上默认的pfile文件启动实例。

*OEM操作:可以查询除参数文件(及ADMIN目录)外的其他文件的位置

5.3 Oracle数据库冷备份的恢复操作

(1)进入DOS,“开始菜单à运行à输入cmd”;

(2)设置Oracle默认SID名称(冷备份时的SID名称,如Ora92LSH或OraABC):

DOS>set oracle_sid=Ora92LSH

(3)创建新的Oracle服务,命令如:

DOS>oradim -new -sid Ora92LSH -intpwd
123456 -pfile <冷备份时的spfile、或pfile、或init等文件的目录及文件名>

其中:

-new 在控制面板服务中增加一个新的Oracle服务;

-sid Ora92LSH 增加的服务名为“OracleServiceOra92LSH”;

-intpwd 123456 在C:\oracle\ora92\database目录下创建一个sysdba的密码验证文件“PWDOra92LSH.ora”,验证密码为“123456”(可自行设置,下面步骤8可能要用);

-pfile <目录及文件名> 告诉Oracle服务,spfile或init参数文件的位置与文件名;该选项如:
-pfile C:\oracle\ora92\database\spfileOra92LSH.ORA


(4)复制spfile、和(或)pfile、和(或)int等参数文件到(冷备份时的)原目录位置;

(5)重启Listener监听器,如下:

DOS> lsnrctl stop

DOS> lsnrctl start

(6)把ADMIN目录下的所有目录及文件拷贝到原来位置;

(7)把控制文件、数据文件、重做日志文件拷贝到原来的位置;

(8)进入sqlplus,并以sysdba身份登录;(可能要用步骤3中设置的密码)

DOS> sqlplus “/as sysdba”

(9)启动数据库到nomount状态

SQL>startup nomount

(10)启动数据库到mount状态

SQL> Alter database mount;

(11)启动数据库到open状态

SQL> Alter database open;

(12)重启动oracle数据库实例,看能否正常启动和关闭

SQL> shutdown immediate;

SQL> startup;

注:

(1) 请记录恢复实验过程中出现的所有问题,并在网上查找解决办法;

(2) Oracle冷备份有多个具体方法,存在细节上的差异,但基本思想相同;

(3) Oracle热备份请在网络和书籍中查找;

(4) Oracle有专用备份工具RMAN。

6. 实验六 PL/SQL实验与PL SQL Developer工具(综合型
8学时)

6.0 实验目的与实验内容

Ø 实验目的

(1) 学习第三方工具PL SQL Developer的使用;

(2) 学习Oracle对SQL标准的扩展和Oracle函数;

(3) 学习SQL标准的事务隔离级别,以及Oracle事务隔离级别;

(4) 学习Oracle各种数据库对象的创建与使用;

(5) 学习Oracle的PL/SQL编程与调试;

(6) 了解Oracle对分布式数据库的功能支持。

Ø 实验内容

(1) PL SQL Developer的安装与使用;

(2) Select查询:多表连接查询、集合查询、树形查询、With子查询,PL SQL Developer查询生成器;

(3) Oracle事务隔离级别

(4) 使用Oracle函数;

(5) Oracle数据库对象:表、索引、视图、序列、同义词、分区、簇、数据库链;

(6) PL/SQL编程实验:游标、存储过程、函数、触发器、包;

(7) Oracle的分布式DB实验:数据库链、快照表(物化视图)、分布式查询、分布式事务。

6.1 PL SQL Developer工具简介(演示)

PL SQL Developer的作用与Sqlplus基本相同,但功能更加强大,可以将它看作是sqlplus与OEM的融合;它是程序员最常用的Oracle工具;安装包自带PDF中文和英文使用手册。

演示与讲解如下:

(1) PL SQL Developer的安装、序列号生成工具、汉化包(不推荐使用)、使用手册(中、英);

Win7/8(64位OS)下的PL
SQL Developer(32位)安装方法,参见《附录5》;

(2) 登录;

(3) 常用工具(Tools)窗口:

工具名称
菜单操作
功能简介
Connections

(连接)

Tools(工具)à connections(连接)

Oracle当前连接,及连接历史记录

Objects

(对象)

Tools(工具)à Object Browser(对象浏览器)

Oracle的对象浏览器,其中2个过滤器分别按用户(如SCOTT)和对象使用类型(如All
objects)进行筛选

Window list

(窗口列表)

Tools(工具)à Window list(窗口列表)

Templates

(模板)

Tools(工具)à Templates list(模板列表)

提供SQL语句、函数、PL/SQL块、循环、错误处理等语句模板

(4) 创建DB对象:“File(文件)àNew(新建)àTable”菜单等;

(5) 查看、编辑表的结构、约束、索引、权限、存储参数、触发器、数据等:对象浏览器中表的右键菜单,如“ObjectsàTablesàSCOTT.EMPà(右键菜单)”,常用功能如下:

菜单
功能
备注
New…

创建新表

“View SQL”可在窗口和SQL脚本之间切换

Duplicate…

复制该表(结构、约束等)到其它用户

Properties

显示表的基本情况,如名称、所有者、存储参数、已有记录信息等

Describe

显示表结构,等价于Sqlplus的Desc命令

View

查看表的结构、约束、索引、权限、存储参数、触发器等

不能修改

Edit

编辑表的结构、约束、索引、权限、存储参数、触发器等

Rename

修改表的名称

Drop

删除表对象

Query data

查询表数据,并可导出数据、绘制统计图

* 使用的是SQL窗口

Edit data

编辑表数据;修改后,要post change ,再commit

、或rollback;刷新数据,即执行SQL窗格中的select语句,使用;

* post change作用是将编辑的数据转换为相应的insert、delete、update语句,并发送到oracle服务

* 使用的是SQL窗口

Export data

导出多张表及其数据

可替代Oracle的Exp工具

(6) SQL Window(SQL窗口):“File(文件)àNew(新建)àSQL
Window”,可编辑和执行多条SQL语句,全屏幕编辑器,可先选中一条或多条SQL语句然后执行,事务结束需要提交、或回滚;

(7) Command Window(命令窗口):相当于sqlplus执行环境,“File(文件)àNew(新建)àCommand
Window”;

(8) Program Window(程序窗口):可编辑和创建存储过程、函数、触发器、包、类型等的SQL脚本;如创建函数:“File(文件)àNew(新建)à Program
WindowàFunction”;

(9) Test Window(测试窗口):可对存储过程、函数等进行调试运行(调试工具!!!),“File(文件)àNew(新建)àTest
Window”;

6.2 Oracle的SQL标准扩展

(1)多表连接查询

在Oracle所有版本中,均支持使用
(+) 表示的左连接与右连接语法,如:

SQL语句例子
说明
Select t.*, s.*
From SCOTT.EMP t, SCOTT.DEPT s

Where t.DEPTNO(+) = s.DEPTNO;

Select t.*, s.*
From SCOTT.EMP t
right outer join

SCOTT.DEPT s on t.deptno=s.deptno;

Select t.*, s.*
From SCOTT.EMP t
right join

SCOTT.DEPT s on t.deptno=s.deptno;

右连接,=号左边的(+)表示以空行补全左边表的记录

SQL标准(右连接),等价于上句

SQL标准(右连接),可省略词outer

Select t.*, s.*
From SCOTT.EMP t, SCOTT.DEPT s

Where t.DEPTNO = s.DEPTNO(+);

Select t.*, s.*
From SCOTT.EMP t
left join

SCOTT.DEPT s on t.deptno=s.deptno;

左连接,=号右边加(+)

SQL标准(右连接),等价于上句

Select t.*, s.*
From SCOTT.EMP t, SCOTT.DEPT s

Where t.DEPTNO(+) = s.DEPTNO(+);

Select t.*, s.*
From SCOTT.EMP t
full join

SCOTT.DEPT s on t.deptno=s.deptno;

全连接,试试左边语句?Oracle不支持(+)表示的全连接!!

SQL标准(全连接)

(2)PL SQL Developer查询生成器

使用方法如下:

1> 在SQL Window中,将光标定位在要生成的Select语句位置;

2> 然后选择菜单

“Tools(工具)àQuery Builder…(查询生成器)àInternal Query Builder(内部)”



“Tools(工具)àQuery Builder…(查询生成器)àActive Query Builder(插件Plug-in)”;

下面以Active Query Builder为例介绍:

3> 不带group by子句时操作(grouping:no check):

² 添加表、内联与外链操作;

² select子句(output:check);

² where条件(Criteria、Or)

² order by子句(Sort type、Sort Order);

4> 带group by子句时操作(grouping:check):

² group by子句(grouping:check + Criteria for:for groups);

² select子句集函数(Aggregate:sum|Avg等
+ Criteria for:for groups);

² having子句(Criteria for:for groups + Criteria);

² where子句(Criteria for:for values + Criteria)。

(3)集合查询
-- 并、交、差操作

Oracle集合运算符如下:

² UNION:(并集)返回两个集合的所有的记录(去掉重复值);

² UNION ALL:(并集)返回两个集合的所有的记录(不去掉重复值);

² INTERSECT:(交集)返回两个集合的所有记录,重复的只取一次;

² MINUS:(差集)返回属于第一个集合,但不属于第二个集合的所有记录;

说明:集合运算中各个集合必须有相同的列数,且类型一致,集合运算的结果将采用第一个集合的表头作为最终的表头,order by必须放在每个集合后。

SQL语句例子
说明
select *
from SCOTT.emp
where sal<=2500

union

select *
from SCOTT.emp
where sal>=2000;

Union--并集操作(SQL标准),去掉重复记录

select *
from SCOTT.emp
where sal<=2500

union all

select *
from SCOTT.emp
where sal>=2000;

Union all--并集操作,不去掉重复记录

select *
from SCOTT.emp
where sal<=2500

INTERSECT

select *
from SCOTT.emp
where sal>=2000;

Intersect--交集操作(SQL标准)

select *
from SCOTT.emp
where sal<=2500

MINUS

select *
from SCOTT.emp
where sal>=2000;

Minus--差集操作

注:SQL Server运算符为except

(4)树形递归查询

Oracle树形递归查询语句的基本语法是:

select ... from <tablename> [where <条件3>]

start with <条件1>

connect by <条件2>;

其中:

<条件1>
是开始查询的根结点的条件,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树;

<条件2>
是递归的连接条件,其中用PRIOR表示上一条记录;

<条件3>
是过滤条件,用于对返回的所有记录进行过滤。

职员表SCOTT.EMP中每个职员均有直接上级主管,若将记录看成节点,则表呈现出树形结构。

14f33
SQL语句例子
说明
select *
from SCOTT.emp

start with empno=7369

connect by empno =
prior mgr;

select *
from SCOTT.emp

start with empno=7369

connect by prior mgr
= empno;

例:从下往上查,即从树中某节点开始向上查到树根

查询7369的所有上级主管

ß 开始节点的查询条件(可以有多条)

ß 待查记录的empno等于已查记录(prior)的Mgr

(功能同上句)

select *
from SCOTT.emp

start with empno=7566

connect by prior empno
= mgr;

select *
from SCOTT.emp

start with empno=7566

connect by mgr =
prior empno;

select *
from SCOTT.emp

where sal>1000

start with empno=7566

connect by prior empno
= mgr;

例:从上往下查,即从树中某节点开始向下遍历其子树

查询7566的所有下级职员

ß 开始节点的查询条件

ß 已查记录(prior)的empno等于待查记录的Mgr

(功能同上句)

(树查询功能同上句)

ß where对树形递归查询后的结果再次筛选

在EMP表中,字段Empno为职员编号(即节点的id,表示为id),字段Mgr为该职员的上级主管(即父节点的id,表示为parent_id),一般:

connect by prior parent_id = id; 或 connect by id =
prior parent_id;
表示上一条记录的parent_id是本条记录的id,即上条记录的父亲是本记录,故从下向上查。

connect by prior id = parent_id; 或 connect by parent_id =
prior id; 表示上一条记录的id是本条记录的parent_id,即本条记录父亲是上条记录,故从上向下查。

(5)Oracle的With子查询

当查询中多次用到某一部分子查询时,可以用Oracle with语句创建一个公共临时表。因为子查询在内存临时表中,避免了重复解析,所以执行效率会提高不少。临时表在一次查询结束后自动清除。

一般语法格式:

with

alias_name1 as (subquery1),

alias_name2 as (subQuery2),

……

alias_nameN as (subQueryN)

select ……

from alias_name1,alias_name2,……,alias_nameN

where ..... ;

SQL语句例子
说明
with

t as (select avg(sal)
avgSal from SCOTT.emp
where deptno=20)

select e.*,t.*
from SCOTT.emp e,t
where e.sal >= t.avgSal;

临时表t代表()中的语句

使用了t的select语句

select e.*,t.*

from SCOTT.emp e,

(select avg(sal) avgSal
from SCOTT.emp
where deptno=20) t

where e.sal >= t.avgSal;

(等价于上例)

from内嵌的子查询t

6.3 Oracle事务隔离级别

(1)SQL标准的事务隔离级别

设置隔离级别的SQL语句:

SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED | READ COMMITTED | REPEATABLE
READ | SERIALIZABLE]

其中:Read Uncommitted
(未提交读);Read Committed(提交读);Repeatable Read(可重复读);Serializable(序列化/串行化),默认值。

设置事务的隔离级别,即意味着数据库按照其隔离级别(协议)进行自动加锁。

隔离级别所解决的并发控制问题、及所采用的封锁协议如下表:

事务隔离级别
并发控制问题
封锁协议
丢失修改
脏读
不可重复读
幻读




无协议:无写锁X,无读锁S

Read Uncommitted





一级:加X锁**,无S锁

Read Committed





二级:加X锁**,加S锁*

Repeatable Read





三级:加X锁**,加S锁**

Serializable





表锁、页锁等范围锁??

注:1. 封锁协议指同一个应用程序中程序员所应共同遵守的编程协议;

2. **--表示直到事务结束时才释放该锁;*--表示读完即释放该锁。

(2)Oracle事务隔离级别

Oracle数据库支持Read Committed(默认值)和Serializable这两种事务隔离级别:

SET TRANSACTION ISOLATION LEVEL [READ COMMITTED | SERIALIZABLE]

Oracle为了提高事务的并发度而采用了回滚段技术,故在Read Committed隔离级别下,不会出现读脏数据现象,但是会出现读旧数据问题。

(3)Oracle并发事务实验

l Read Committed隔离级别下的并发实验

并发实验1 在PL SQL Developer中使用Scott连接,并打开2个SQL
Window,分别代表事务T1和T2:

顺序
T1(1,4,7)
T2(2,3,5)
说明
1
SET TRANSACTION ISOLATION

LEVEL READ COMMITTED;

select *
from emp

where empno=7369;

T1:职员7369的工资Sal=800

2
SET TRANSACTION ISOLATION

LEVEL READ COMMITTED;

update emp
set sal = sal

+
30 where empno=7369;

T2:工资涨30元

3
select *
from emp

where empno=7369;

T2:查询其工资Sal为830元

4
select *
from emp

where empno=7369;

T1:查询其工资Sal仍为800元

5
commit;

T2结束,开始一个新事务T3

6
select *
from emp

where empno=7369;

T3:查询其工资Sal为830元

7
select *
from emp

where empno=7369;

T1:查询其工资Sal变为830元

思考:

(1)步骤4:T1没有读到T2未提交的数据830(可能会成为脏数据),说明没有脏读现象;而此时T2已经将其工资改为了830(且之后成功提交),说明T1读到了旧(老)数据;

(2)步骤4:按照二级封锁协议,T2对emp表的7369记录应该加了X锁,此时T1不能读该记录,应该处于等待状态,但T1仍成功读取而没有等待,说明Oracle回滚段技术提高了并发度,且没有采用二级封锁协议(即未加读锁);

(3)步骤7:结果说明T1出现不可重复读现象。

练习:将步骤5中的Commit改为Rollback,再做一次实验(先将7369的工资改回800);结果会有何不同?

并发实验2 并发更新实验(先将7369的工资改回800):

顺序
T1(1,3,5)
T2(2,4,7)
说明
1
SET TRANSACTION ISOLATION

LEVEL READ COMMITTED;

select *
from emp

where empno=7369;

T1:职员7369的工资Sal=800

2
SET TRANSACTION ISOLATION

LEVEL READ COMMITTED;

select *
from emp

where empno=7369;

T2:职员7369的工资Sal=800

3
update emp
set sal = sal

+
30 where empno=7369;

select *
from emp

where empno=7369;

T1:工资涨30元

T1:查询其工资Sal为830元

4
update emp
set sal = sal

+
50 where empno=7369;

T2:工资涨50元,发现一直在执行…

5
commit;

T1结束,开始一个新事务T3;此时步骤4才执行完成

6
select *
from emp

where empno=7369;

T3:查询其工资Sal为830元

7
select *
from emp

where empno=7369;

commit;

T2:查询其工资Sal变为880元

T2结束,开始一个新事务T4

8
select *
from emp

where empno=7369;

T3:查询其工资Sal为880元

思考:

(1)步骤4、5结果说明了什么?步骤6、7、8呢?

(2)请小结:Oracle在Read Committed隔离级别下是如何加锁的?

l Serializable隔离级别下的并发实验

并发实验3 将上述并发实验1中的T1的隔离级别修改为Serializable后进行实验(先将7369的工资改回800)

顺序
T1
T2
说明
1-6




(步骤同上例)

7
select *
from emp

where empno=7369;

T1:其工资Sal仍为800元!!why??

8
commit; /
rollback;

T1结束(提交或回滚)

9
select *
from emp

where empno=7369;

T4:工资Sal变为830元

说明:

(1)T1级别为SERIALIZABLE,即使事务T2在提交了数据之后,事务T1还是看不到T2提交的数据,因为幻想读和不可重复读在T1中都不允许了。

(2)因为T1级别是SERIALIZABLE,所以T1所查询的数据集是T1事务开始前数据库的数据;即,事务T2在事务T1开始之后的insert和update操作的影响都不会影响事务T1。

(3)那如何能查看到T2更新的记录呢?
重开一个新事务,如上面的T4。

练习:将并发实验2中事务T1和T2的Read
Committed均修改为Serializable后,再做一次实验(先将7369的工资改回800);结果是?

6.4 Oracle常用函数

实验内容:参见《附录4 Oracle常用函数》。

PL SQL Developer的模板工具窗口的SQL function目录下有所有Oracle函数及其格式。

6.5 Oracle数据库对象的创建、维护与使用

请同学们根据教材和讲授内容自行实验,数据库对象应包括:表、索引、视图、序列、同义词、分区、簇、数据库链、抽象类型等。

6.6 PL/SQL:游标、触发器、存储过程、函数、包

请同学们根据课程教材和讲授内容自行实验。

6.7 Oracle分布式DB功能实验

涉及内容:数据库链、快照表(物化视图)、分布式查询、分布式事务。



附录1. 实验内容--知识点

1. 启动Oracle服务、监听服务

*Oracle启停:控制面板-->服务、DOS命令(oradim工具)、SQL
Plus

*概念:Oracle启动的几个步骤

2. Net配置(Oracle Net Manager)--本地及远程Oracle服务器

*监听程序

*服务命名及测试

*配置文件(TNSNames.ora、Listener.ora)

3. 进入OEM(Oracle企业管理器)--SYSDBA

*添加数据库节点

*登录(Normal、SysOper、SysDBA)

4. OEM管理存储

*表空间(TableSpace):SYSTEM、TEMP、UNDO、TOOLS、USERS、自定义表空间

*表空间:状态(联机|脱机|只读)、类型(永久|临时TEMP|还原UNDO)、默认存储参数(段、区、块,启动日志记录)

*数据文件与表空间

*重做日志组与重做日志文件

*归档日志,及其与重做日志、归档日志模式之间的关系

5. OEM管理用户(User)、角色(Role)、权限(Privilege)、概要文件(Profile)

*用户:SYS、SYSTEM、SCOTT、自定义用户

*角色:CONNECT、RESOURCE、DBA、自定义角色

*系统权限:SYSDBA、SYSOPER、SELECT ANY
DICTIONARY、CREATE ANY TABLE、ALTER ANY TABLE、DROP
ANY TABLE等含义

*对象权限:如表的SELECT、INSERT、DELETE、UPDATE等权限,存储过程的EXEC权限

*概要文件:DEFAULT、自定义概要文件

*用户与表空间、角色、系统权限、对象权限、概要文件之间的关系

*角色与角色、系统权限、对象权限之间的关系

*授权与回收权限语句:Grant、Revoke

6. OEM管理数据库对象

*表Table、

*视图View、

*索引Index、

*序列Sequence

*同义词Synonym

*数据库链DatabaseLink

*快照 ??SnapShot
??

*触发器Trigger

*存储过程Procedure

*函数Function

*包Package

*方案与用户

7. OEM管理服务器例程

*例程配置:状态(关闭|已启动|已装载|打开)、数据库与例程信息、初始化参数、内存(SGA、PGA等)、恢复、还原

*会话

*锁

8. DBCA创建、修改、删除Oracle数据库

9. Oracle数据库的冷备份与恢复、热备份与恢复等实验

10. Oracle Home Selector工具,用于机器安装有多个Oracle版本时,选择默认版本

11. OraDIM(DOS/Unix命令行工具),用于手工进行Oracle服务的创建、修改、删除、启动、停止等工作

12. LsnrCtl(DOS/Unix命令行工具),用于Listener监听器的启动、关闭、及查看监听状态

13. TnsPing(DOS/Unix命令行工具),用于客户端测试Oracle监听服务能否ping通

Oracle Net 命令行工具tnsping,是一个OSI会话层的工具,它用来:

1)验证名字解析(name resolution,是oracle自己的网络服务名)

2)远程的listener是否启动

也就是说:

1> tnsping 命令可以检查tcp协议是否已通,俗称我们说的网络通不通

2> tnsping命令监听服务器上的监听是否已开启

3> tnsping命令不检测服务器上的监听的服务名,所以tnsping通,不代表就能连通。

14. SQL Plus(DOS)、SQL Plus(Windows)、SQL
Plus Worksheet(Windows)

15. EXP/IMP(数据导出/导入DOS命令行工具),用于Oracle数据的导出与导入

16. PL SQL Developer(强大的第三方Oracle工具)

附录2. SQL Plus常用命令

表 F2-1 SQL Plus常用命令
SQL*Plus命令
缩写
类别
含义与例子
ACCEPT variable [type]

ACC

从键盘输入值到宏变量,如下例给a输入数字20;引用时前加“&”号,即&a;相似命令--Define

SQL> acc a number

SQL> select * from scott.emp where deptno=&a;

APPEND text

A

编辑

把字符串增加到当前行的末尾

CHANGE /old/new/

C

编辑

把当前行的旧字符串替换成新字符串

CHANGE /text/

C

编辑

把当前行中字符串删除

CLEAR BUFFER

CL BUFF

编辑

从SQL缓冲区中删除所有行

CONNECT [userid [/password] [@servername] [AS SYSOPER | SYSDBA]]

CONN

连接

连接Oracle(登录),例:

conn scott/tiger --以SCOTT用户连接本地Oracle

conn scott/tiger@ora92lsh --连接到ORA92LSH

conn system/manager as sysdba --以SYS连接本地

DEFINE [variable] | [variable = text]

DEF

运行

定义宏变量,如:

SQL> def a='where deptno=20'

SQL> select * from scott.emp &a;

DEL

编辑

删除当前行

DESCRIBE tablename

DESC

查看

显示任何数据库表的数据结构

DISCONNECT

连接

断开连接

EDIT

ED

编辑

用默认的编辑器(记事本)编辑缓冲区中的内容

EDIT filename

ED

编辑

用默认的编辑器(记事本)编辑指定文件,如:

Edit D:\test.sql

EXIT

退出SQL*Plus,并默认执行一个COMMIT语句

GET filename

编辑

把以filename为名字的文件内容调入SQL缓冲区中

INPUT

I

编辑

插入许多行

INPUT text

I

编辑

插入一个包含text字符串的行

HOST command

HO

运行

在SQL*Plus中执行一个操作系统命令

LIST

L

编辑

显示SQL缓冲区的所有行

LIST n

L

编辑

显示SQL缓冲区中的第n行,并作为当前行

LIST m n

L

编辑

SQL缓冲区中的从第m行显示到第n行

Print

PROMPT text

当运行一个命令文件时,显示文本

RUN

R

运行

显示并运行在缓冲区中的当前SQL命令

/

运行

运行在缓冲区中的当前SQL命令

RUNFORM filename

运行

从SQL*Plus中运行一个Oracle Forms应用程序

SAVE filename

编辑

把SQL缓冲区中的内容保存到以filename为名字的文件中,默认路径为orawin\bin

SET ARRAYSIZE n

环境

ArraySize表示一次从服务器端获取的记录行数,默认15,加大该值可加快SQL语句返回速度

SET AUTOCOMMIT ON | OFF

环境

设置自动提交事务模式是否开启,OFF时需要COMMIT或ROLLBACK结束事务,默认OFF(否)

SET FEEDBACK ON | OFF

环境

设置是否显示最后一行的记录行数信息,默认ON

SET HEADING ON | OFF

环境

设置是否输出列标题,默认ON

SET LINESIZE n

环境

设置屏幕宽度(字符个数),默认80

SET LONG n

环境

设置LONG字段类型数据在SQL Plus中的长度,默认80

SET PAUSE ON | OFF

环境

设置显示是否暂停,ON会使屏幕显示暂停,按下ENTER键,再显示下一页,默认为OFF

SET SQLPROMPT "string"

环境

设置SQL Plus提示符,默认"SQL>"

SET TIMING ON | OFF

环境

设置是否返回耗时,可用来估计SQL语句的执行时间,测试性能,默认为OFF

SHOW ALL

SHO

查看

显示所有68个环境变量值

SHOW ERROR

SHO

查看

显示错误

SHOW USER

SHO

查看

显示当前连接的用户

SHOW AUTOCOMMIT

SHO

查看

显示环境变量AutoCommit的值

SHOW TIMING

SHO

查看

显示环境变量Timing的值

SPOOL filename

SPO

SPOOL

写所有的后面的命令或者输出到一个已经命名的文件中。假脱机输入输出文件的后缀为.LIS

SPOOL OFF|OUT

SPO

SPOOL

OFF 关闭假脱机输入输出文件;OUT改变假脱机输入输出,送文件到打印机上

START filename

@

运行

运行以前保存的命令文件

VARIABLE variable [<字段类型>]

VAR

运行

定义Bind变量(宿主变量),可用于存储过程的IN/OUT变量,使用时变量前加“:”号,如:

SQL> VAR a number; --定义变量

SQL> EXEC :a := 100; --赋值

SQL> print :a; --显示变量a的值

SQL> select :a from dual; --查询等SQL语句中使用

HELP [topic]

?

帮助

显示帮助信息。注:帮助信息存放在Oracle内部,故连接后才能使用。如:

? conn --查询CONN命令的语法

? c --查询以C开头的所有命令的语法

? sqlplus --查询启动SQL Plus命令的语法

注:完整的SQL Plus命令格式,请使用HELP命令。

附录3. SQL脚本文件
- OraCreateTables.sql

--建立课程表(Course)

CREATE TABLE Course (

Cno CHAR(2)
NOT NULL ,

Cname NVARCHAR2(20) ,

Cpno CHAR(2) ,

Ccredit NUMBER(2) ,

Constraint CoursePK
Primary Key (Cno)

)

/

--建立学生表(Student)

CREATE TABLE Student (

Sno CHAR(5)
NOT NULL ,

Sname NCHAR(6) ,

Ssex NCHAR(1) ,

Sage NUMBER(2) ,

Sdept NCHAR(2) ,

Constraint StudentPK
Primary Key (Sno),

Constraint SageCK
Check (Sage >=
0 AND Sage <
150)

)

/

--建立学生选课表(SC)

CREATE TABLE SC (

Sno CHAR(5)
NOT NULL ,

Cno CHAR(2)
NOT NULL ,

Grade NUMBER(3) ,

Constraint SCPK
Primary Key (Sno,Cno),

Constraint StudentFK
Foreign Key (Sno)
References Student(Sno),

Constraint CourseFK
Foreign Key (Cno)
References Course(Cno),

Constraint GradeCK
Check (Grade >=
0 AND Grade <=
100)

)

/

insert into Course
values('1','数据库原理','5',3);

insert into Course
values('2','高等数学','',4);

insert into Course
values('3','操作系统','5',4);

insert into Course
values('4','管理信息系统','1',4);

insert into Course
values('5','数据结构','7',4);

insert into Course
values('6','计算机网络','3',4);

insert into Course
values('7','C语言程序设计','',4);

insert into Course
values('8','离散数学','2',4);

insert into Student
values('95001','李胜利','男',20,'CS');

insert into Student
values('95002','张伟','男',21,'IS');

insert into Student
values('95003','刘慧敏','女',19,'CS');

insert into Student
values('95004','王强','男',22,'IS');

insert into Student
values('95005','李莉','女',20,'CS');

insert into Student
values('95006','钟晓月','女',19,'MA');

insert into SC
values('95001','1',null);

insert into SC
values('95001','3',92);

insert into SC
values('95001','5',88);

insert into SC
values('95002','1',null);

insert into SC
values('95002','3',79);

insert into SC
values('95003','1',70);

insert into SC
values('95004','1',80);

insert into SC
values('95004','5',90);

commit;

附录4. Oracle常用函数

ORACLE可以自动根据具体情况对表达式进行类型转换,如:字符串到数值、字符串到日期、数值到字符串、日期到字符串。如:

select '3.14159' +
20 from dual;
--*字符串到数值

select '100' ||
124 from dual;
--*数值到字符串

请在下面例子中加以注意。

表F3-1常用数值函数
函数
返回值
样例
显示
Abs(n)

n的绝对值

Atan(n)

Ceil(n)

大于等于数值n的最小整数

select ceil(10.6) from dual

11

Floor(n)

小于等于数值n的最大整数

select floor(10.6) from dual

10

Ln(n)

n的自然对数

Log(base, n)

以base为底的n的对数

Mod(m,n)

M除以n的余数,若n=0,则返回m

select mod(7,5) from dual

2

Power(m,n)

M的n次方

select power(3,2) from dual

9

Round(n,m)

将n四舍五入,保留小数点后m位

select round(1234.5678,2) from dual

1234.57

Sign(n)

若n=0,返回0;否则n>0,返回1;n<0,返回-1

select sign(12) from dual

1

Sqrt(n)

N的平方根

select sqrt(25) from dual

5

Tan(radians)

表F3-2 常用字符函数
函数
返回值
样例
显示
Ascii(c)

返回字符的ascii码

select ascii('赵'),
ascii('a') "a" from dual;

54740, 97

Chr(n)

返回ascii码对应的字符

select chr(54740)
zhao, chr(65) chr65
from dual;

赵, A

Concat(c1,c2)

连接两个字符串

select concat('010-',88888888)||'转23' 电话
from dual;

Convert(char, dest_char_set, source_char_set)

将源字符串从一个语言source字符集转换到另一个目的dest字符集

InitCap(char)

把每个字符串的第一个字符换成大写

Select initcap(‘mr.teplow’) from dual;

Mr.Teplow

Length(char)

求字符串的长度

Select length(‘Anderson’)

from dual;

8

Lower(char)

整个字符串换成小写

Select lower('Mr.Frank Townson')
from dual;

mr.frank townson

Lpad

在左边补齐字符

select lpad('gao',10,'*') from dual;

*******gao

Ltrim

截去字符串左空/子串

Select ltrim(' ABC '),
ltrim('**AB**','*'),
ltrim('ABABC*','AB')
from dual;

ABC ,AB**, C*;

Replace(char,str1,str2)

字符串中所有str1换成str2

Select replace('Scott','S','Boy')
from dual;

Boycott

Rpad

在右边补齐字符

select Rpad('gao',10,'*') from dual;

gao*******

Rtrim

截去字符串右空/子串

Soundex(char)

字符串的语音表示,常用于名字的模糊查询,可查找发音相似拼写不同的字符串

Select last_name from employee

where soundex(last_name) = soundex(‘SMYTHE’)

SMITH

Substr(char,m,n)

取出从m字符开始的n个字符的子串

Select substr(‘ABCDEF’,2,1) from dual;

B

Trim

截去字符串左、右空/子串

Upper(char)

整个字符串换成大写

Ø “||”--字符串连接运算符,如:SQL>select ‘ABC’||’DEF’ from dual; --返回文本”ABCDEF”。

表F3-3
常用日期函数
函数
返回值
样例
显示
Sysdate

当前日期和时间

Select sysdate from dual;

25-12月-14

To_date

Last_day

本月最后一天

Select last_day(sysdate) from dual;

31-12月-14

Add_months(d,n)

当前日期d后推n个月

Select add_months(sysdate,2) from dual;

25-2月-15

Months_between(f,s)

日期f和s间相差月数

Select months_between(sysdate,’12-MAR-02’) from dual;

Next_day(d,day)

d后第一周指定的day日期

Select next_day(sysdate,’Monday’) from dual;

Ø 设置默认日期格式(NLS_DATE_FORMAT):

会话级:SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

数据库级:SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Ø 查看默认日期、时间格式(NLS_DATE_FORMAT、NLS_TIME_FORMAT):

会话级:SQL>select * from nls_session_parameters;

实例级:SQL>select * from nls_instance_parameters;

数据库级:SQL>select * from nls_database_parameters;

表F3-4
常用日期数据格式
格式
返回值
样例
显示
Y或YY或YYY

年的最后一位,两位或三位

Select to_char(sysdate,’YYY’) from dual;

002表示2002年

SYEAR或YEAR

年,SYEAR使公元前的年份前加一负号

Select to_char(sysdate,’SYEAR’) from dual;

-1112表示公元前1112年

Q

季度,1到3月为第一季度

Select to_char(sysdate,’Q’) from dual;

2

表示第二季度

MM

月份数

Select to_char(sysdate,’MM’) from dual;

12表示12月

RM

月份的罗马表示

Select to_char(sysdate,’RM’) from dual;

IV表示4月

Month

用9个字符长度表示的月份名

Select to_char(sysdate,’Month’) from dual;

May后跟6个空格表示5月

WW

当年第几周

Select to_char(sysdate,’WW’) from dual;

24表示2002年6月13日为第24周

W

本月第几周

Select to_char(sysdate,’W’) from dual;

1

2002年10月1日为第1周

DDD

当年第几天,1月1日为001,2月1日为032

Select to_char(sysdate,’DDD’) from dual;

363

2002年12月29日为第363天

DD

当月第几天

Select to_char(sysdate,’DD’) from dual;

04

10月4日为第4天

D

周内第几天

Select to_char(sysdate,’D’) from dual;

5

2002年3月14日为星期一

DY

周内第几天缩写

Select to_char(sysdate,’DY’) from dual;

SUN

2002年3月24日为星期天

HH或HH12

12进制小时数

Select to_char(sysdate,’HH’) from dual;

02

午夜2点过8分为02

HH24

24小时制

Select to_char(sysdate,’HH24’) from dual;

14

下午2点08分为14

MI

分钟数(0-59)

Select to_char(sysdate,’MI’) from dual;

17

下午4点17分

SS

秒数(0-59)

Select to_char(sysdate,’SS’) from dual;

22

11点3分22秒

Oracle提供三种主要的转换函数。

Ø To_char将任意类型的数据转换成字符类型。语句:

select to_char(8897) from dual; --返回字符串'8897';

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;

SELECT TO_CHAR(SAL) FROM SCOTT.EMP;

SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;

Ø To_number将一组合法的数字字符串(如字符数据8897)转换成数值。语句select to_number(‘8897’) from dual;返回一个包括数值8897的数值类型的数据。

Ø To_date将适合格式的字符串数据转换成日期型数据。这是最容易产生错误的转换。因为12-DEC-02是合法的日期格式,语句select to_date(‘12-DEC-02’) from dual;能成功地进行数据转换。而语句select to_date(‘bad date’) from dual;,在执行时会出问题。语句select to_date(‘20021227’,’YYYYMMDD’)
from dual;将返回日期27-DEC-02因为在to_date函数中的日期格式和被转化的数据是合法的。语句select to_date(‘20021236’,’YYYYMMDD’) from dual;将失败因为在12月中没有36天。

附录5 Win7/8(64位)下PL SQL Developer(32位)的安装

PL SQL Developer(32位)的win7(64位)安装方法:安装一个32位的Oracle客户端,将Oracle服务器(64位)端的tnsnames.ora文件复制过来。

工具/原料(Oracle官网上自己下载):

• Oracle 11g (64位)

• instantclient-basic-win32-11.2.0.1.0

方法/步骤:

(1)安装Oracle 11g(64位);

(2)安装32位的Oracle客户端(
instantclient-basic-win32-11.2.0.1.0);

下载instantclient-basic-win32-11.2.0.1.0.zip
(Win7 64位系统暂无PL SQL Developer,所以下一个32位的Oracle客户端),将其解压至Oracle安装目录的Product下(本机命名为:instantclient_11_2):D:\Oracle\app\Dell\product\instantclient_11_2

拷贝数据库安装根目录下的一个文件夹:D:\Oracle\app\Dell\product\11.2.0\dbhome_1

\NETWORK到Oracle客户端目录下D:\Oracle\app\Dell\product\instantclient_11_2(其实只需要
NETWORK\ADMIN\tnsnames.ora)

(3)安装PL/SQL Developer

(4)启动PL/SQL Developer

在perferenceàConnection里面设置OCI Library和Oracle_Home,例如本机设置为:

Oracle Home :D:\Oracle\app\Dell\product\instantclient_11_2

OCI Library :D:\Oracle\app\Dell\product\instantclient_11_2\oci.dll

(5)设置环境变量(修改PATH和TNS_ADMIN环境变量):

对于NLS_LANG环境变量,
最好设置成和数据库端一致,
首先从数据库端查询字符集信息:

SQL> select userenv('language') nls_lang from dual;

NLS_LANG

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

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

右击"我的电脑" - "属性" - "高级"
- "环境变量" - "系统环境变量":

1>.选择"Path" -
点击"编辑",
把 "D:\Oracle\app\Dell\product\instantclient_11_2;"
加入;

2>.点击"新建",
变量名设置为"TNS_ADMIN",
变量值设置为"D:\Oracle\app\Dell\product\instantclient_11_2;",
点击"确定";

3>.点击"新建",
变量名设置为"NLS_LANG",
变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK",
点击"确定";

最后点击"确定"退出.



附录6. 实验报告模板

长江大学 计算机课程实验报告
课程名称
班级
实验日期
姓名
学号
实验成绩
实验名称
(给出本次实验的题目)








(给出本次实验所涉及并要求掌握的知识点)






(列出本次实验所使用的平台和相关软件)






(给出实验内容具体描述)











(用适当的形式表达算法设计思想与算法实现步骤)










(详细记录在调试过程中出现的问题及解决方法。记录实验执行的结果)





(对实验结果进行分析,问题回答,实验心得体会及改进意见)





(源程序清单)

梁少华

长江大学 计算机学院
编写日期:2014-12-15
修改日期:2015-05-15
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: