1977年,Oracle诞生。现CEO劳伦斯.埃里森 Lawrence (Larry) J. Ellison与女上司Robert Miner创立“软件开发实验室”(Software Development Labs)。当时IBM发表“关联数据库”的论文,埃里森以此研发新数据库,名为Oracle。1979年,公司前往硅谷,更名为“关系软件公司”(Relational Software Inc. , RSI)。1983年,为了突出公司的核心产品,RSI再次更名为Oracle。2002年4月26日,正式启用“甲骨文”作为公司的中文注册商标。
Oracle是数据库管理系统,是Oracle公司的核心产品。Oracle在管理信息系统、企业数据处理、因特网及电子商务等领域使用非常广泛。由于其在数据安全性与完整性控制方面的优越性能,以及跨操作系统、跨硬件平台的数据互操作能力,使得越来越多的用户将Oracle作为其应用数据的处理系统。
Oracle数据库系统的主要版本有Oracle 8i、Oracle 9i、Oracle 10g,最新版本是Oracle 11g。其中后缀i的含义是Internet,表示Oracle公司进军互联网。后缀g的含义是Grid,表示支持网格计算。本书中使用的版本是Oracle 11g。
Oracle数据库基于“客户/服务器”(Client/Server,C/S)系统结构。此概念将应用程序功能处理划分到两个系统中,即客户端和服务器端。与用户相关的活动在客户端完成,数据库相关的活动在服务器端完成。
Oracle数据库的主要特点如下:
Ø 支持多用户,高并发事务处理。
Ø 数据安全性和完整性方面性能优越。
Ø 网格计算,Oracle能够把许多低成本的设备集成起来,为用户提供高性能的共享计算能力。
Ø 具有高可移植性,能够在主流的操作系统和硬件平台上运行。
我们在学习SQL Server的时候,为了正常使用SQL Server数据库,会打开Windows操作系统的“服务”组件启动SQL Server相应的系统服务。那么为了使用Oracle,该如何启动Oracle数据库呢?
实际上,Oracle数据库库的启动和关闭是日常工作之一。Windows操作系统下的Oracle服务以后台服务进程的方式来进行管理。服务是在数据库创建过程创建的,并且与数据库关联,启动或关闭与Oracle数据库相关的服务,即完成Oracle数据库的启动和关闭。一个数据库有一项或多项服务与之关联。如果要查看Oracle服务,可以选择【开始】→【设置】→【控制面板】→【管理工具】→【服务】来打开“服务”窗口,如图1.21.1所示。
Ø OracleOraDb11g_home1TNSListener
OracleOraDb11g_homeTNSListener服务是Oracle服务器的监听程序。客户端必须先连接驻留在数据库服务器上的监听程序,才能连接数据库服务器。监听器接收从客户端发出的请求,然后将请求传递给数据库服务器,以此建立客户端与服务器的连接。一旦建立了连接,客户端便可以与Oracle数据库服务器直接通信。
Ø OracleServiceSID
OracleServiceSID服务是为SID(系统标识符)数据库示例创建的。其中,SID是在安装Oracle 11g时输入的数据库名称。该服务是Oracle的核心服务,启动Oracle实例必须启动该服务。
Ø OracleJobSchedulerSID
OracleJobSchedulerSID服务是任务调度服务,负责按预先设置的时间周期性地执行某项用户自定义的功能,从而实现Oracle服务器的自动管理功能。
Ø OracleDBConsoleSID
OracleDBConsoleSID服务负责在Windows平台下启动Oracle企业管理器。Oracle 11g企业管理器是一个功能完善的Oracle数据库管理工具,可以管理本地数据库环境和网络环境。如图1.21.2所示:
注意
Oracle服务器端,至少应该启动OracleOraDb11g_homeTNSListener和OracleServiceSID两个服务。
启动Oracle数据库之后,就可以开始使用Oracle数据库来完成我们需要的数据处理。启动的内部过程比较复杂,本章暂且不仔细研究,先掌握在正确启动Oracle数据库之后,使用SQL Plus和PL/SQL Developer两款常用工具登录到数据库。
Oracle默认创建多个用户,其中包括SYS、SYSTEM和SCOTT。
Ø SYS用户
SYS用户是Oracle中的超级用户,主要用于维护系统信息和管理示例,数据库中数据字典的所有表和视图都存储在SYS中。
Ø SYSTEM用户
SYSTEM用户是Oracle中默认的管理员,它拥有DBA权限。该用户拥有Oracle管理工具使用的内部表和视图,通常通过SYSTEM用户管理Oracle数据库的用户、权限和存储等。
Ø SCOTT用户
SCOTT是Oracle数据库的示例用户。SCOTT用户包含4张示范表,该用户的默认口令为tiger。
注意
建议日常的管理任务使用SYSTEM用户登录Oracle数据库服务器。如果需要执行备份、恢复、更改数据库的任务,则必须以SYS用户登录Oracle数据库服务器。
当能够正确启动并登录Oracle数据库之后,我们开始体验Oracle对数据的管理。那么在Oracle当中,我们如何新建数据表,标准的数据类型都有哪些呢?
SQL(结构化查询语言)是一种在关系型数据库中定义和操作数据的标准语言,是应用程序与数据进行交互操作的接口。
SQL查询语言主要包括以下4种:
(1)数据定义语言(Data Definition Language,DDL):用于创建、修改和删除数据库对象,如CREATE TABLE、ALTER TABLE、DROP TABLE等。DDL语句可以自动提交事务。
(2)数据操纵语言(Data Manipulation Language,DML):用于操纵数据库,包括INSERT、UPDATE、DELETE、SELECT等。
(3)数据控制语言(Data Control Language,DCL):用于执行授予权限和撤销权限的操作,包括GRANT(授予权限)、REVOKE(撤销权限)两条命令。DCL语句可以自动提交事务。
(4)事务控制语言(Transactional Control Language,TCL):用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句。
Oracle 支持的数据类型多达几十种。其中,常用数据类型大致可以分为字符类型、数字类型、日期类型、大对象类型等。以下将讲解常用、典型的数据类型。
1.字符类型
(1)CHAR类型
CHAR表示固定长度字符串,长度不足时使用空格补充,最多可以存储2000个字节。CHAR类型区分中英文,中文在CHAR中占两个字节,而英文只占一个字节,所以CHAR(20)只能存20个字母或10个汉字。
(2)VARCHAR2类型。
VARCHAR2表示可变长度字符串,最多可以存储4000个字节。在定义该数据类型时,应该指定其大小。与CHAR类型相比,使用VARCHAR2可以节省磁盘空间。例如,某列数据定义了VARCHAR(10)的数据类型,当用户输入5个字节的字符时,该列值的长度将是5个字节,而非10个,但该列值最大长度不能超过10个字节。
2.数值类型
NUMBER类型可以存储正数、负数、零、定点数和精度为38位的浮点数,格式为:NUMBER(M,N),其中M表示精度,代表数字的总位数;N表示小数点右侧数字的位数。以下将演示NUMBER数据类型的用法:
(1)size number(2):表示size列的值只能是整数,并且最多只能取两位整数。
(2)PRice number(6,2):表示price列的整数部分最多只能是4位,小数部分最多只能保留两位。
3.日期类型
(1)DATE类型。
DATE数据类型用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日。DATE类型的长度是7,7个字节分别表示世纪、年、月、日、时、分、秒。
(2)TIMESTAMP类型
TIMESTAMP数据类型用于存储日期的年、月、日以及时间的小时、分和秒值。其中,秒的数据值精确到小数点后6位,该数据类型同时包含时区信息。
4.大对象类型
(1)CLOB大字符串对象类型
CLOB(Character Large Object)数据类型用于存储可变长度的字符数据,最多可存储4GB的数据。该数据类型用于存储VARCHAR2类型不能存储的长文本信息。
(2)BLOB大二进制类型
BLOB(Binary Large Object)数据类型用于存储较大的二进制对象,如图片、视频剪辑和声音剪辑等,最多可存储4GB的数据。
注意
Oracle也支持INTEGER、FLOAT、DOUBLE等数值类型,但建议采用Oracle自身的NUMBER数据类型;Oracle也支持VARCHAR字符类型,但建议采用Oracle自身的VARCHAR2类型。
Oracle中,可以使用CREATE TABLE命令创建数据库表,具体语法如下。
CREATE TABLE[<方案名>.]<表名> ( <列名1><数据类型>, <列名2><数据类型>, …… <列名n><数据类型> ) |
问题:
某移动通信公司需要建设网上营业厅,需要使用Oracle数据库存储用户个人信息,内容包括:机主姓名、手机号码、地市归属、入网时间、消费品牌名称(如动感地带)等基本信息。如何创建数据库表以保存个人信息呢?
以SCOTT用户登录SQL Plus,输入示例21.1的SQL代码。
示例1.1
CREATE TABLE PERSONAL_INFO
(
OWNER_NAME VARCHAR2(20) NOT NULL,
TEL_CODE VARCHAR2 (15) NOT NULL,
CITY VARCHAR2 (20) NOT NULL,
NETWORK_DATE DATE NOT NULL,
BRAND_NAME VARCHAR2 (20) NOT NULL
);
执行后,使用DESC 命令查看表结构。运行结果如图1.4.11.7所示:
图1.4.11.7 创建个人信息表的显示结果
我们在之前学习SQL Server知识的时候,已经学习过对表字段添加各种约束,例如唯一约束,在我们新建的个人信息表中,TEL_CODE(手机号码)需要添加唯一约束,怎么实现呢?修改表结构,并添加唯一约束,如示例1.2所示:
示例1.2
SQL> ALTER TABLE PERSONAL_INFO ADD CONSTRAINT U_TEL_CODE UNIQUE (TEL_CODE);
SQL>COL COLUMN_NAME FOR A20;
该代码表示在接下来的查询中,列“COLUMN_NAME”按照20个字符宽度显示。
SQL> SELECT CONSTRAINT_NAME, COLUMN_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME='PERSONAL_INFO';
该代码使用了数据库视图USER_CONS_COLUMNS,此视图存储了数据库表中所有的约束信息,对应的列描述见表1-41-1。
表1-41-1 列信息
列名 | 描述 |
CONSTRAINT_NAME | 约束名称 |
COLUMN_NAME | 约束所在的列名称 |
TABLE_NAME | 约束所在的表名称 |
通过对图1.4.21.8的观察,发现在TEL_CODE列上,建立了U_TEL_CODE唯一约束。
已经创建了数据库表,下一步就要录入数据。需要解决的一个问题是:个人信息表没有主键,如果有一ID字段并能够实现自动编号功能,就方便多了。Oracle中是如何解决主键自动增长的呢?
Oracle并没有类似SQLServer中的Identity来定义主键自增属性。如果要实现主键自增,常用的方法是定义一个序列Sequence,然后在插入数据记录时取序列中的下一个值nextval即可。
序列(Sequence)是Oracle提供的的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中使用序列值来实现主键自增。
Oracle中的CREATE SEQUENCE命令用于创建序列。
CREATE SEQUENCE <序列名称> [START WITH 初始值 ] [INCREMENT BY 步长 ] [MINVALUE 最小值 | NOMINVALUE ] [MAXVALUE 最大值 | NOMAXVALUE ] [CYCLE | NOCYCLE ] [CACHE 预分配序列个数 | NOCACHE] [ORDER | NOORDER] |
说明如下:
Ø START WITH 用于指定序列的起始值。
Ø INCREMENT BY 用来指定序列的增量,如果取负值,则为递减序列。
Ø MINVALUE | NOMINVALUE 指定序列是否有最小值。
Ø MAXVALUE | NOMAXVALUE 用来说明序列是否有最大值。
Ø CYCLE | NOCYCLE 用于指定序列值达到最大之后,是否重新从最小值开始产生。
Ø CACHE | NOCACHE 用来指定是否在缓存中保存预先分配的序列值,如果选择CACHE,可以提高获取序列的速度。
Ø ORDER | NOORDER 是否确保序列值是否唯一和有序。
下面定义SEQ_PERSONAL_INFO序列用来实现PERSONAL_INFO表的主键自动编号,如示例1.3所示。
示例1.3
CREATE SEQUENCE SEQ_PERSONAL_INFO
START WITH 1
INCREMENT BY 1
NOMAXVALUE
CACHE 20;
使用序列时,需要用到序列的两个伪列NEXTVAL和CURRVAL,其中NEXTVAL返回序列的下一个值,而CURRVAL返回序列的当前值。
至此,我们只需要修改PERSONAL_INFO表,添加ID列,之后就可以使用序列实现自增了。如示例1.4所示。
示例1.4
ALTER TABLE PERSONAL_INFO ADD ID NUMBER PRIMARY KEY;
INSERT INTO PERSONAL_INFO VALUES('张三','19900000000','北京','18-7月-2011',
'动感地带',SEQ_PERSONAL_INFO.NEXTVAL);
INSERT INTO PERSONAL_INFO VALUES('李四','19900007777','北京','18-7月-2011',
'全球通',SEQ_PERSONAL_INFO.NEXTVAL);
首先修改了PERSONAL_INFO表,添加了主键字段ID。然后往表中新增了2条记录。
在本章前一节的内容中,我们接触了INSERT命令,会发现与之前学习的SQL Server操作很相似。事实上,虽然Oracle数据库功能非常强大,体系结构与其他数据库有较大差异,但其同样遵循标准的SQL语言。因此,对于修改和表数据,删除表数据不再在过多介绍,只给出语法。
UPDATE 表名 SET 列名=值 [ , 列名=值 , …… ] [ WHERE 条件 ] DELETE [ FROM ] 表名 [ WHERE 条件 ] |
使用SELECT编写子查询
在数据库数据操作语句(DML)中,查询是较复杂的一类操作,也是体现数据库技能掌握是否良好的重要指标。在涉及基于数据库编程方面,查询也是至关重要的知识。本节我们着重讲解Oracle数据库数据查询的知识。
1,.SCOTT示例方案简介
Oracle数据库安装的时候会提示是否安装示例数据库,如果选择安装了,会提供SCOTT方案供学习Oracle数据库使用。SCOTT方案有表如1-6-11-2所示的数据表。
表1-1-12
表名 | 描述 |
EMP | 雇员表 |
DEPT | 部门表 |
SALGRADE | 薪水等级表 |
BONUS | 奖金表 |
2,.单行子查询
子查询是指嵌套在其他SQL语句中的查询,它可以出现在SELETE、WHERE、FROM等语句中。使用子查询,可以用一系列简单的查询构成复杂的查询,从而增强SQL语句的功能。
单行子查询不向外层查询返回记录或者只返回一条记录。子查询可以放在SELECT语句的WHERE或FROM等子句中。
示例1.5要求查询工资最高的雇员信息。
示例1.5
SELECT EMPNO, ENAME, SAL, HIREDATE FROM EMP
WHERE SAL= (SELECT MAX (SAL) FROM EMP);
多行子查询
多行子查询可以向父查询返回多行记录。在WHERE语句中使用多行子查询时,必须使用多行运算符(IN、NOT IN、EXISTS、NOT EXISTS、ALL和ANY等)。例如,查询工资高于部门20中所有员工的雇员信息,先利用子查询获得部门20中所有员工的工资,再利用父查询获得其工资大于等于这些员工的雇员信息。
示例1.6
SELECT ENAME, JOB, SAL, DEPTNO FROM EMP
WHERE SAL >= ALL (SELECT SAL FROM EMP WHERE DEPTNO=20);
相关子查询
相关子查询是指引用了父查询中某些列的子查询。在相关子查询中,父查询所处理的每一行都先被传递给子查询。子查询依次处理这些行,即将其应用到子查询,如果满足子查询中的条件,则父查询中的这一行就是最终结果集中的一行,直到父查询中的每一行都处理完成为止。一般可以在SELECT或WHERE语句中使用相关子查询。例如,查询负责管理其他雇员的管理员信息,父查询提供一个雇员编号(EMPNO)给子查询,子查询利用该雇员编号查询是否存在一个管理者(MGR)与父查询提供的雇员编号(EMPNO)对应。若存在,则说明该EMPNO就是管理者,将其显示出来。
示例1.7
SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP A
WHERE EXISTS (SELECT * FROM EMP B WHERE B.MGR = A.EMPNO);
添加数据
数据库用来保存数据的,添加数据使用insert语句
(1)添加一条语句
SQL>insert into dept(deptno,dname,loc) values (60,’市场部’,’Beijing’);
插入多行
将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.
SQL> create table dept1(deptno number(2) primary key,dname varchar2(14),loc varchar2(13));
SQL> insert into dept1 select * from dept;
修改语句
SQL> update dept set dname = ‘国内市场部’, loc=’HongKong’ where deptno = 60;
删除语句
SQL> delete from dept where deptno = 60 or dname = ‘销售部’;
Delete语句中如果没有where子句表示删除表中的所有数据
8.使用Truncate 删除所有数据
SQL> truncate table shopinfo;
使用delete语句可以删除表中的全部数据,但是delete操作会被记录在日志文件中,
9.Oracle分页查询
Rownum是一个伪列,它会根据返回的记录生成一个序列化的数字。可以使用ROWNUM列返回查询结果集中前N条记录
SQL> select rownum,deptno,ename,job,mgr,hiredate from emp where rownum<10
分页实现
比如每5行为一页,现在要显示第2页,就是要显示第6行到第10行
SQL> select e.* from
( select rownum r,deptno,ename,job,mgr,hiredate from emp ) e
Where r>5 and r<11;
10. rowid伪列
rowid就是唯一标志记录物理位置的一个id,内容是当前行位于哪个文件,块,行的详细信息。
SQL> select rownum,deptno,dname,loc from dept
dual虚表
dual是系统定义的表,只有一行一列数据. 写成select 100*200 from dual 这里的dual只是为了完善语义的 。对于虚表(dual)来说,其中的列往往是不相关的或无关紧要的。
SQL> select 5*9 from dual;
SQL> select sysdate from dual;
;在第二学期,我们详细的学习了JDBC相关知识,在这里我们简要的回顾一下关键步骤和核心对象。
Ø 第一步,加载驱动。关键代码:Class.forName(“……”);
Ø 第二步,建立连接。关键代码:DriverManager.getConnection(“……”);
Ø 第三步,执行SQL。核心对象:PreparedStatement
Ø 第四步,处理结果。核心对象:ResultSet
Ø 第五步,释放资源。
本章前部分,新建了个人信息数据库表,现在需要查询北京地区动感地带用户数量。需要使用JDBC访问Oracle数据库实现。
示例1.8
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Date; public class PagingEmpInfo {public static void main(String[] args) {showPagingEmp(2,5);}/** * 分页查询员工信息 * @param pageNum 第几页 * @param pageSize 每页记录数 * */public static void showPagingEmp(int pageNum,int pageSize){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;//数据库连接信息String driverClass = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@localhost:1521:orcl";String user = "scott";String passWord = "tiger";try {//加载驱动Class.forName(driverClass);} catch (ClassNotFoundException e) {e.printStackTrace();}try {//建立数据库连接con = DriverManager.getConnection(url,user,password);//准备将要执行的SQL语句,?号表示占位符,执行是会被具体值替代String sql = "select e.* from "+"(select rownum r,ename,job,hiredate from emp) e"+" where r> ? and r<?";//创建语句对象System.out.println(sql);stmt = con.prepareStatement(sql);//替换占位符int begin = (pageNum-1)*pageSize;int end = pageNum*pageSize+1;stmt.setInt(1, begin);stmt.setInt(2, end);//执行SQL语句,得到结果集rs = stmt.executeQuery();//处理数据while(rs.next()){int rownum = rs.getInt(1);String ename = rs.getString(2);String job = rs.getString(3);Date hiredate = rs.getDate(4);System.out.println(rownum+"/t"+ename+"/t"+job+"/t"+hiredate);}} catch (SQLException e) {e.printStackTrace ();}finally {//释放数据库连接if(con != null){try {con.close ();} catch (SQLException e) {e.printStackTrace ();}}} }}执行结果如图1.1.24所示
图1.1.24北京动感地带用户数
从示例1.
78可以看出,使用JDBC访问Oracle数据库的步骤与访问SQLServer的步骤相同,只是具体连接参数不同。数据库驱动类名称字符串为“oracle.jdbc.driver.OracleDriver”,数据库连接字符串为“jdbc:oracle:thin:@localhost:1521:orcl”,其中“localhost”是Oracle服务器IP地址或者机器名,“1521”是监听端口,“orcl”是数据库实例示例名称。Ø 本章总结
Ø Oracle 11g实例启动必须启动OracleOraDb11g_home1TNSListener,OracleServiceSID服务
Ø Oracle内存可分为系统全局区(SGA)和程序全局区(PGA)
Ø SYS用户是Oracle中的超级用户,SYSTEM是Oracle中默认的管理员,它拥有DBA权限,SCOTT是Oracle数据库的一个示范帐户
Ø Oracle管理工具主要包括SQL*PLUS、PL/SQL Developer和Oracle Enterprise Manager
Ø 使用JDBC访问Oracle数据库
Ø rownum是一个伪列,它会根据返回的记录生成一个序列化的数字,rowid就是唯一标志记录物理位置的一个id,内容是当前行位于哪个文件,块,行的详细信息。
Ø Oracle 支持的数据类型多达几十种。其中,常用数据类型大致可以分为字符类型、数字类型、日期类型、大对象类型等
Ø 序列(Sequence)是Oracle提供的的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中使用序列值来实现主键自增。Oracle中的CREATE SEQUENCE命令用于创建序列
任务实训部分
1:使用SQL命令创建数据表
训练技能点
Ø 能够正确使用SQL Plus登录到Oracle数据库
Ø 熟练使用Oracle数据类型
Ø 熟练使用CREATE TABLE命令创建表
需求说明
在Oracle中使用SQL命令创建一个联系人表,表结构如下所示。
表1-2-1 联系人表
列名 | 数据类型 | 约束 |
id | number | 主键,自增 |
name | varchar2 | 非空 |
address | varchar2 |
|
phone | varchar2 |
|
实现步骤
(1) 启动相关Oracle服务
(2) 打开SQL Plus登录到Oracle数据库
(3) 使用CREATE TABLE命令按照表1-2-1创建表
训练技能点
Ø 为联系人表的id字段创建序列
Ø 在insert语句中使用序列
需求说明
联系人表的id字段是自动增长列,所以在Oracle中需要创建序列,要求从1开始,每次自增1。
实现步骤
(1) 使用CREATE SEQUENCE命令创建序列
(2) 使用insert命令向联系人表中插入测试数据
训练技能点
Ø 使用PL/SQL Developer工具登录Oracle数据库
Ø 使用PL/SQL Developer工具创建表
Ø 使用PL/SQL Developer工具创建序列
Ø 使用PL/SQL Developer工具插入测试数据
需求说明
前两个实训任务都是通过SQL Plus工具实现的,现在要求把联系人表删掉并使用PL/SQL Developer工具实现前两个实训任务
训练技能点
Ø JDBC连接Oracle数据库
Ø JDBC查询数据
需求说明
使用JDBC连接联系人表,并查询表中的所有数据显示到jsp页面上
实现步骤
(1) 创建DAO类,在该类中实现两个方法:连接数据库和查询数据
(2) 在JSP页面中调用DAO类把查询到的数据显示到页面上
(3) 显示页面时使用分页方式
巩固练习
一、选择题
1. 在使用Oracle数据库时至少需要启动()服务。
A. OracleOraDb11g_home1TNSListener
B. OracleServiceSID
C. OracleDBConsoleSID
D. OracleJobSchedulerSID
2. 下列()不是Oracle默认的用户。
A. system
B. sys
C. scott
D. sa
3. 关于jdbc:oracle:thin:@localhost:1521:orcl说法正确的是()。
A. 1521是Oracle的默认端口号
B. orcl是表名
C. localhost表示应用程序所在的机器
4. 下列()用于支持OEM服务。
A. OracleOraDb11g_home1TNSListener
B. OracleServiceSID
C. OracleDBConsoleSID
D. OracleJobSchedulerSID
5. 下列关于序列的说法正确的是()。
A. 序列一旦创建,就可以立即使用CURRVAL列
B. 在引用序列的CURRVAL列前,必须引用过一次NEXTVAL列
C. 可以修改序列中的起始值
D. 序列的初始值可以从0开始
二、上机练习
在Oracle中使用SQL Plus创建新闻表news,表结构如下所示。
表1-3-1 新闻表
列名 | 数据类型 | 约束 |
id | number | 主键,自增 |
title | varchar2 | 非空 |
content | varchar2 |
|
author | varchar2 |
|
创建好后在PL/SQL Developer工具中插入测试数据。
Oracle扩展进阶
Sqlplus常用命令
1. 显示当前用户
show user
2. 建立连接
connect scott/tiger
connect sys/admin as sysdba
3.断开连接
disconnect
4.退出sqlplus
exit
quit
5.执行sql 文件
Start 或者@d:/aa.sql
6.编辑上一次的SQL语句
ed
7.保存输入的代码
Spool
spool d:/b.sql
spool off
8. 设置行大小(linesize) 默认80字符
set linesize 150
9. 显示行大小
show linesize
10. 设置页大小,显示页大小
set pagesize 500
show pagesize
11. select * from scott.emp
12. desc user_tables
13.select table_name from user_tables;
16.SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = ‘T1’
新闻热点
疑难解答