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’
新聞熱點
疑難解答