1. 程式人生 > 資料庫 >青軟實訓-銳聘學院-Oracle作業

青軟實訓-銳聘學院-Oracle作業

做的不一定對,有錯誤可以告訴我。

Excise 1.1

理論練習

1、Oracle是__ 物件關係型 __資料庫管理系統。

2、Oracle 9i中的i和Oracle 10g、Oracle11g中的g各代表什麼意思。

I:Internet,因特網
G:grid,網格計算

3、Oracle11g中的g表示(C)。

A 網路 B 資料庫 C 網格計算 D 版本

面試筆試題

1、Oracle跟SQL Server 2005的區別?

1. 最大的區別在於平臺,oracle可以執行在不同的平臺上,sql server只能執行在windows平臺上,由於windows平臺的穩定性和安全性影響了sql server的穩定性和安全性

2. oracle使用的指令碼語言為PL-SQL,而sql server使用的指令碼為T-SQL

2、對資料庫SQL2005、Oracle熟悉嗎?

3、資料庫DB、資料庫系統DBS、資料庫管理系統DBMS三者之間的關係是___A___。(選擇1項)

A)DBS包括DB和DBMS B)DBMS包括DB和DBS

C)DB包括DBS和DBMS D)DBS就是DB,也就是DBMS

Excise 1.2

理論練習

1、 完全解除安裝Oracle 11g時,需要進行的第一步操作是( A )。

A 停止所有的Oracle服務 B 啟動Oracle的解除安裝嚮導

C 刪除磁碟上的Oracle檔案 D 刪除資料庫Orcl

2、 安裝Oracle資料庫過程中SID指的是什麼( B )。

A 系統標識號 B 資料庫名 C 使用者名稱 D 使用者口令

上機練習

1、 下載Oracle安裝包,在本機安裝Oracle資料庫

登入U+賬號後,點選下載。

2、 在本機解除安裝Oracle資料庫

1. 停用oracle服務:進入計算機管理,在服務中,找到oracle開頭的所有服務,右擊選擇停止
2. 在開始選單中,找到Universal Installer,執行Oracle Universal Installer,單擊解除安裝產品
3. 在產品清單視窗中,單擊全部展開,除了OraDb11g_home1外,勾選其他專案,單擊刪除

4. 按Windows徽標鍵和R鍵,開啟執行視窗,輸入regedit,開啟登錄檔,依次展開HKEY_LOCAL_MACHINE\SOFTWARE,找到oracle,刪除
5. 依次展開HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中,刪除所有oracle開頭的項
6. 依次展開HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,刪除所有oracle開頭的項;
7. 重啟電腦,刪除oracle目錄,刪除Oracle的安裝目錄app等

Excise 1.3

理論練習

1、 Oracle網路配置分為伺服器端和客戶端,監聽程式的配置是在__伺服器端___ 。

2、 監聽程式與Net服務名的關係是怎樣的?
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-DDcPq32Y-1609048919433)(img/p1.3.1.png)]
監聽程式:Oracle…TNSListener
Net服務名:OracleService…

上機練習

1、完成Oracle資料庫監聽器及客戶端的配置

Excise 1.4

理論練習

1、 要開啟Oracle伺服器,必須開啟的兩個服務是( D )。

A.OracleHOME_NAMETNSListener和OracleHOME_NAMEAgent

B.OracleServiceSID和OracleHOME_NAMEHTTPServer

C.OracleHOME_NAMEAgent和OracleServiceSID

D.OracleHOME_NAMETNSListener和OracleServiceSID

上機練習

1、 檢視Oracle資料庫安裝後,系統的服務增加了哪些,開啟相關服務,啟動Oracle資料庫

2、 關閉相關服務,關閉Oracle資料庫

Excise 1.5

理論練習

1、 Oracle伺服器的兩個主要元件:_ 檔案_、__ 記憶體__ 。

2、 例項由__Oracle DB___ 和___Oralce Server__ 組成。

3、 Oracle的物理結構包括___資料檔案___、___控制檔案___、___日誌檔案___。

4、 當Oracle伺服器啟動時,下列哪種檔案不是必須的( D )。

A 資料檔案 B 控制檔案 C 日誌檔案 D 歸檔日誌檔案

5、 在Oracle中,一個使用者擁有的所有資料庫物件統稱為( B )。

A 資料庫 B 模式 C 表空間 D 例項

6、 在Oracle資料庫的邏輯結構中有以下元件:ABCD

A 表空間 B 資料庫 C 區 D 段

這些元件從大到小依次是( B-A-D-C

A A->B->C->D B A->D->C->B C A->C->B->D D D->A->C->B

7、 在Windows作業系統中,Oracle的( B )伺服器監聽並接受來自客戶端應用程式的連線請求。

A OracleHOME_NAMETNSListener B OracleServiceSID

C OracleHOME_NAMEAgent D OracleHOME_NAMEHTTPServer

8、 關於模式的描述下列哪一項不正確?( C

A 表或索引等模式物件一定屬於某一個模式

B 在Oracle資料庫中,模式與資料庫使用者是一一對應的

C 一個表可以屬於多個模式

D 一個模式可以擁有多個表

9、判斷:Oracle資料庫的表空間記憶體的邏輯物件為段,段由盤區組成,而盤區又由多個數據塊組成。(

面試筆試題

1、介紹一下oracle的體系結構?

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ORWBREpW-1609048919438)(img/p1.5.1.png)]

2、下列不屬於Oracle邏輯結構的是( C )。

A 區 B 段 C 資料檔案 D 表空間

3、Oracle中有哪幾種檔案?

資料檔案、控制檔案、日誌檔案

4、解釋data block , extent , segment和tablespace的區別?

@import “img\資料庫儲存總圖.png”

block:塊,最小的資料管理單位
extent:區:儲存分配的最小單位
segment:段,一個或多個連續的區組成
tablespace:表空間

資料庫由一個或多個表空間組成
表空間由一個或多個數據檔案組成,一個表空間包含多個段
段由一個或多個區組成
區是資料檔案中一個連續的分配空間,由一個或多個塊組成
塊是資料庫中最小、最基本的單位,是資料庫使用的最小的I/O單元
每個使用者都有一個對應的方案

Excise 1.6

上機練習

1、 使用Oracle 11g特有的企業管理器連線Oracle資料庫

2、 使用Oracle自帶的客戶端工具sqlplus連線Oracle資料庫

@import “img/p1.6.2.png”

3、 安裝PLSQL Developer圖形化工具,並使用該客戶端工具連線Oracle資料庫

@import “img/p1.6.3.png”

Excise 2.1

理論練習

1、 判斷:表空間是Oracle最大的邏輯組成部分。Oracle資料庫由一個或多個表空間組成。一個表空間由一個或多個數據檔案組成,但一個數據檔案只能屬於一個表空間。( 資料庫

2、 判斷:表空間分為永久表空間和臨時表空間兩種型別。( 系統/非系統

3、 判斷:Oracle資料庫的邏輯儲存結構主要由表空間構成。(

上機練習

1、 在Web版企業管理器中,建立名稱為mytablespace的表空間。為表空間增加一個名為datafile01的資料檔案,大小為100M。然後編輯該表空間,為其新增一個datafile02的資料檔案,大小為50M。

2、 在PLSQL Developer中建立使用者myname,密碼為123456,將其預設的表空間修改為mytablespace。

@import “code\2.1.1.ans.sql”

3、 在sqlplus中建立名稱為user_data的表空間,為表空間增加一個名為user_data的資料檔案,大小為50M;建立名稱為user_temp的臨時表空間,並增加一個名為user_temp的資料檔案,大小為50M。
刪除建立成功的表空間與臨時表空間。

@import “code\2.1.2.ans.sql”

面試筆試題
1、在Oracle中建立使用者時,若未提及DEFAULT TABLESPACE關鍵字,則Oracle就將___C___

表空間分配給使用者作為預設表空間。

A)HR B)SCOTT C)SYSTME D)SYS

Excise 2.2

理論練習

1、 下面哪個使用者不是Oracle預設安裝後就存在的使用者( A )。

A SYSDBA B SYSTEM

C SCOTT D SYS

上機練習

1、 在SQL*PLUS下建立使用者qst,密碼為123456,預設表空間為user_data,臨時表空間為user_temp;

修改使用者qst密碼為123;

鎖定和解鎖使用者qst;

刪除使用者qst

@import “code/2.2.2.sql”

2、 在PLSQL Developer中建立使用者qst1,密碼為123456,預設表空間為user_data,臨時表空間為user_temp;

修改使用者qst1密碼為123;

鎖定和解鎖使用者qst1;

刪除使用者qst1

@import “code/2.2.2.ans.sql”

面試筆試題
1、 Oracle有哪些使用者?其預設口令和許可權是什麼?

syssystemscott
managermanagertiger

Excise 2.3

理論練習

1、 判斷:DBA角色具有全部系統許可權。(

2、 判斷:每一個數據庫使用者必須具有RESOURCE角色才能登入到Oracle資料庫中,所以RESOURCE角色使用者是許可權最低的使用者。(

上機練習

1、 在SQL*PLUS下為使用者qst賦予連線資料庫的許可權,以及訪問scott中emp表的許可權;

@import “code/2.3.1.ans.sql”

2、 在SQL*PLUS下對使用者qst回收連線資料庫的許可權,以及訪問scott中emp表的許可權;

@import “code/2.3.2.ans.sql”

3、 在SQL*PLUS下為使用者qst賦予連線並訪問資料庫的角色:connect,resource;

@import “code/2.3.3.ans.sql”

4、 在SQL*PLUS下實現許可權的傳遞:scott使用者中對emp表的訪問許可權通過許可權傳遞授予qst,使用者qst再把該許可權授予qst1;
@import “code/2.3.4.ans.sql”

5、 在SQL*PLUS下建立角色、刪除角色;
@import “code/2.3.5.ans.sql”

6、 在PLSQL Developer中為使用者qst1賦予連線並訪問資料庫的角色:connect,resource

SQL> grant connect,resource to qst1;

Grant succeeded

面試筆試題

1、下面哪個操作會導致使用者連線到Oracle資料庫,但不能建立表( A )。

A 授予了CONNECT的角色,但沒有授予RESOURCE的角色

B 沒有授予使用者系統管理員的角色

C 資料庫例項沒有啟動

D 資料庫監聽沒有啟動

2、授予sa使用者在SCOTT.EMP表中SAL列的更新許可權的語句是( C )。

A GRANT CHANGE ON SCOTT.EMP TO SA

B GRANT UPDATE ON SCOTT.EMP(SAL) TO SA

C GRANT UPDATE (SAL) ON SCOTT.EMP TO SA

D GRANT MODIFY ON SCOTT.EMP(SAL) TO SA

Excise 3.1

理論練習

1、 SQL縮寫的含義是__結構化查詢語言,_Structured_Query_Language___。

2、 SQL語言的組成包括___資料定義語言(DDL) 資料操作語言(DML)_、___資料控制語言(DCL)___、___事務控制語言(TCL)___四種。

3、 簡述DDL、DML、DCL、TCL縮寫分別代表的含義是什麼,其包含的SQL語句分別有哪些?

資料定義語言(DDL,Data Definition Language):建立或刪除表格。也可以定義索引(鍵),規定表之間的連結,以及施加表間的約束。
CREATE/ALTER DATABASE、CREATE/DROP/ALTER TABLE、CREATE/DROP INDEX

資料操作語言(DML,Data Manipulation Languag):供使用者實現對資料的增刪改查等操作。
SELECT、UPDATE、DELETE、INSERT INTO
資料控制語言(DCL):
事務控制語言(TCL):

4、常用的偽列有哪兩個,他們之間的區別是怎樣的?

面試筆試題

1、 用來存放可變長度字串的型別是:____VARCHA2

2、 關於型別定義Number(9,2)說法正確的有___B___。

A)整數部分9位,小數部分2位,共11位 B)整數部分7位,小數部分2位,共9位
C)整數部分6位,小數點一位,小數部分2位,共9位 D)以上說法均不正確

3、 在PL/SQL塊中定義一個名為PI值為3.14的常量的語法是____D___。

A)PI Const number=3.14; B)PI Real number =3.14;
C)Constant PI number:=3.14 D)PI Constant number:=3.14

4、 ___C__consta_是指組成表的各列的名稱及資料型別,也就是日常表格的“欄目資訊”。

A)表型 B)記錄 C)欄位 D)關鍵字

Excise 3.2

理論練習

1、 資料定義語言,縮寫為____DDL____ ,用於改變資料庫結構,包括建立、_____刪除____ 和 _____ 更改____資料庫物件。

2、 用於操縱表結構的資料定義語言命令有哪些?

create/drop/alter/truncate

3、 Truncate與Drop的區別是什麼?

TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。DROP刪除表定義及其資料。

上機練習

1、 某學校要建立一個學生選課系統,分為以下三張表:

1.s學生表:

欄位名稱資料型別是否可為空
學號(PK)snovarchar2(10)
學生姓名snamevarchar2(20)

2.c課程表:

欄位名稱資料型別是否可為空
課程號(PK)cnovarchar2(5)
課程名稱cnamevarchar2(20)
任課老師cteachervarchar2(20)

3.sc學生選課表

欄位名稱資料型別是否可為空
學號sno(FK)varchar2(10)
課程號cno(FK)varchar2(5)
成績scgradevarchar2(20)

①請依次建立這三張表。

SQL> 
SQL> create table s(
  2      sno varchar2(10) primary key,
  3      sname varchar2(20)
  4  );

Table created


SQL> create table c(
  2      cno varchar2(5) primary key,
  3      cname varchar2(20),
  4      cteacher varchar2(20)
  5  );

Table created


SQL> create table sc(
  2      sno varchar2(10),
  3      cno varchar2(5),
  4      scgrade varchar2(20) not null,
  5      foreign key(sno) references s(sno),
  6      foreign key(cno) references c(cno)
  7  );

Table created

②修改表s,為其增加一列stel(電話);

SQL>  alter table s add tel varchar2(11);

Table altered

③修改表c,將其“課程名稱”列的資料型別長度增加一倍;


SQL> alter table c modify cname varchar2(40);

Table altered
 

④修改表sc,將其“成績”列名改為“總分”;
@import “code\3.2.4.sql”

⑤刪除表c;
@import “code\3.2.5.sql”

⑥重命名錶s為ss;
@import “code\3.2.6.sql”

面試筆試題

1、 表userInfo中有三個欄位(userID、userName、userAddress),現在要刪除欄位 userAddress,正確的命令是____B___。

A)UPDATE userInfo DROP COLUMN userAddress

B)ALTER TABLE userInfo DROP COLUMN userAddress

C)ALTER userInfo DROP COLUMN userAddress

D)ALTER TABLE userInfo DELETE COLUMN userAddress

2、要將表userInfo從資料庫中刪除,所用的命令是:______drop table userInfo;_________。

3、SQL語言中,用來建立、修改及刪除資料庫物件的語言被稱為:資料庫操作語言_。

4、比較truncate、delete和drop命令。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。
新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。
如果要刪除表定義及其資料,請使用 DROP TABLE 語句。

Excise 3.3

理論練習

1、 根據資料完整性機制所作用的資料庫物件和範圍不同,資料完整性可分為____ 實體完整性 __ 域完整性 ______、 ____ 參照完整性 ____ 、______使用者自定義完整性____四種類型。

2、 對實體完整性進行約束的方法有___非空約束___、___唯一約束___。

3、 對引用完整性進行約束的方法可以是____ 新增外來鍵約束____。

4、 在資料完整性當中,____域完整性____可以用檢查約束、非空約束,或者預設值方法進行約束。

5、 在資料完整性當中,可以用觸發器進行約束的是________。

6、 常見的五大約束分別為____主鍵約束非空約束唯一約束檢查約束__、預設約束。

上機練習

1、 結合視訊和綜合設計題1,完成表的建立,並新增相應的約束。

2、 在3.2章節“上機練習”中,為表s的sno,表c的cno新增主鍵約束;為表sc中的sno和cno新增外來鍵約束,scgrade列新增非空約束;為 表s中新新增的的stel列新增唯一約束。


SQL> alter table s add constraint PK_s_sno primary key(sno);

Table altered


SQL> alter table c add constraint PK_c_cno primary key(cno);

Table altered


SQL> alter table sc add constraint FK_sc_sno foreign key(sno) references s(sno);

Table altered


SQL> alter table sc add constraint FK_sc_cno foreign key(cno) references c(cno);

Table altered


SQL> alter table sc modify scgrade constraint NN_sc_scgrade not null;

Table altered


SQL> alter table s add constraint UN_s_tel unique(tel);

Table altered



3、 新建立一張帶有約束的僱員表emptest,表結構如下:

屬性資料型別相應約束
員工編號number(3)主鍵
姓名varchar2(20)非空
性別varchar2(2)預設為“男”,且性別只能為“男”或“女”
生日date

請問該如何建立這張表?

@import “code\3.3.3.sql”

面試筆試題

1、唯一約束與主鍵約束的一個區別是___D____?

A)唯一約束的列的值不可以有重複值 B)唯一約束的列的值可以不是唯一的

C)唯一約束的列不可以為空值 D)唯一約束的列可以為空值

2、在關係資料庫中,建立資料庫表時,將年齡欄位值限制在12~40歲之間的這種約束屬於___B___。

A)檢視完整性約束 B)域完整性約束 C)參照完整性約束 D)實體完整性約束

3、假設需要為表 customer 新增主鍵約束,主鍵列為 customer_id,可以使用如下____BD____

方式。(選擇2項)
A)Alter table CUSTOMER ADD pk_customer primary key (“customer_id”);
B)Alter table CUSTOMER ADD primary key (“customer_id”);
C)Alter table CUSTOMER ADD constraint pk_customer (“customer_id”);
D)Alter table CUSTOMER ADD constraint pk_customer primary key (“customer_id”);

4、Oracle會為______主鍵________約束自動建立索引。
5、 已知關係:廠商(廠商號,廠名)PK=廠商號

產品(產品號,顏色,廠商號)PK=產品號,FK=廠商號,表如下:

廠商號廠名
C01巨集達
C02利仁
C03廣源
產品號顏色廠商號
P01C01
P02C03

若再往產品表中插入如下記錄:

I(P03,紅,C02)
II(P01,藍,C01)
III(P04,白,C04)
IV(P05,黑,null)

能夠插入的記錄是___D____。

A)I,II,IV B)I,III C)I,II D)I,IV

6、在以下哪幾種情況下使用唯一約束而不使用主鍵約束:AB_ (選擇2項)

A)列或幾個列的組合不是主鍵 B)列的值允許為空值

C)列有外來鍵引用 D)列的值不允許為空值

Excise 3.4

理論練習

1、 資料操縱語言,縮寫為____DML,主要用於增加___、____刪除更改____資料。

2、 ______查詢_____是最常見的SQL命令。

3、 資料操縱語言命令包括___INSERT___ 、__ DELETE 、_UPDATE、___。

上機練習

1、 在3.2章節的“上機練習”中,向s表中插入資料。插入內容如下:

學號姓名電話
10001王曉明13112341118
10002王涵13212341118
10003李有才13312341118
10004張小小13412341118
10005董強13512341118
SQL> insert into s values(10001,'王曉明',1312341118);

1 row inserted


SQL> insert into s values(10002,'王涵',1312341118);

1 row inserted


SQL> insert into s values(10003,'李有才',1312341118);

1 row inserted


SQL> insert into s values(10004,'張小小',1312341118);

1 row inserted


SQL> insert into s values(10005,'董強',1312341118);

1 row inserted

2、 生成一個新的表s1,表結構與s表基本一致,有“學號”和“姓名”兩列,表中內容如下:

學號姓名
10001王曉明
10002王涵

要求用舊錶s生成新表s1去實現。

從舊錶變成新表,需要從三列變兩列。舊錶非空,所以需要先使用truncate清空表。刪除的列無外部約束,可以直接刪除。

SQL> create table s1 as select * from s;

Table created

SQL> truncate table s1;

Table truncated

SQL> alter table s1 drop column tel;

Table altered

-- ORA-12988: 無法刪除屬於 SYS 的表中的列(可能報錯,換個使用者就好了)

3、 修改s表中的資料,將董強的電話改為13612341118。


SQL> update s set tel='13612341118' where SNAME='董強';

1 row updated

4、 查詢修改後的s表中的全部資訊。


SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10001      王曉明               1312341118
10002      王涵                 1312341118
10003      李有才               1312341118
10004      張小小               1312341118
10005      董強                 13612341118

5、 刪除s1表中的學號列。


SQL> alter table s1 drop column sno;

Table altered

面試筆試題

1、 比較Truncate和Delete命令。

delete:刪除表中的某些記錄
trancate:刪除表中的所有記錄,僅保留表結構。

2、 簡述oracle中,dml、ddl、dcl的使用。

DML:SELECT、INSERT、UPDATE、DELETE

DDL:CREATE TABLE、 ALTER TABLE、DROP TABLE、CREATE INDEX、DROP INDEX

DCL :ALTER、GRANT、REVOKE、CREATE

3、下列哪些語句屬於DML語句___AD____?(選擇2項)

A)select count(*) from dba_tables; B)create table test (a number);

C)alter table test nologging; D)delete from test;

4、UPDATE-SQL語句的功能是___D____。

A)屬於資料定義功能 B)屬於資料查詢功能

C)可以修改表中某些列的屬性 D)可以修改表中某些列的內容

5、使用SQL命令將STUDENT中的學生年齡AGE欄位值增加1歲,應該使用的命令是___D____。

A)REPLACE AGE WITH AGE+1 B)UPDATE STUDENT AGE WITH AGE+1

C)UPDATE SET AGE WITH AGE+1 D)UPDATE STUDENT SET AGE=AGE+1

6、要刪除表userInfo中的所有記錄,用_________trancate table userInfo;_delete * from userInto;________兩個命令實現?

Excise 3.5

理論練習

1、 為使用者提供許可權控制命令的語言是___資料控制語言_____,其縮寫為____DCL _____。

2、 用於許可權控制的命令有____REVOKRGRANT____。

上機練習

1、 假設使用者student2建立了表s,表s的表結構和資料參見3.3、3.5章節。現要求把查詢、修改表s的許可權賦予普通使用者student1,該如何操作?
切換使用者sys,

grant select,update on s to studente1;

2、 收回student1對錶s進行修改的許可權,該如何操作?

revoke select,update on s from studente1;

面試筆試題

1、REVOKE 是屬於__C___語句?

A)DQL B)DML C)DDL D)DCL

2、GRANT 語句是___C__語句?

A)DQL B)DML C)DDL D)DCL

Excise 3.6

理論練習

1、 _____事務____是指作為一個邏輯單元整體進行工作的一系列操作。

2、 用於事務控制的語句有___BEGIN______ 、____ ROLLBACK _____ 、____COMMIT_____。

3、 事務應該具有四個屬性,分別為___原子性____ 、 ____ 一致性___ 、 ___ 隔離性 ____ 、 ___ 持續性____。這四個屬性通常稱為事務的 ____ 四大 ____特性。

上機練習

1、 向3.2章節“上機練習”中的s表新增兩行資料,新增後設置儲存點p1,應該如何操作?新增的資料內容如下

學號姓名電話
10010孫燕姿18600001111
10020周杰倫18900002222

SQL> insert into s values(10010,'孫燕姿','18600001111');

1 row inserted


SQL> insert into s values(10020,'周杰倫','18900002222');

1 row inserted


SQL> savepoint p1;

Savepoint created

2、 更新學號為10020的電話為18000000000,更新後設置儲存點p2,應該如何操作?


SQL>  update s set tel='18000000000' where sno='10020';

1 row updated


SQL> savepoint p2;

Savepoint created


3、 刪除學號為10010的學生記錄,刪除後設置儲存點p3,應該如何操作?


SQL>  delete from s where sno='10010';

1 row deleted


SQL>  savepoint p3;

Savepoint created

4、 分別回滾到p1,p2,p3的狀態,查看錶s中資料的變化;

錯了,應該是分別回到p3,p2,p1的狀態。這是p1,p2,p3的情況:因為回到了p1,所以p2和p3就不存在了。
報錯:  ORA-01086: 從未在此會話中建立儲存點 'P2' 或者該儲存點無效

SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10020      周杰倫               18000000000

SQL> rollback to p3;

Rollback complete


SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10020      周杰倫               18000000000

SQL> rollback to p2;

Rollback complete


SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10010      孫燕姿               18600001111
10020      周杰倫               18000000000

SQL> rollback to p1;

Rollback complete


SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10010      孫燕姿               18600001111
10020      周杰倫               18900002222

  

5、 最後提交操作,查看錶s中資料的變化。

SQL> commit;

Commit complete


SQL> select * from s;

SNO        SNAME                TEL
---------- -------------------- -----------
10010      孫燕姿               18600001111
10020      周杰倫               18900002222

面試筆試題

1、________包含了一組資料庫操作命令,並且所有的命令作為一個整體一起向系統提交或撤消操作請求。

Excise 4.1

理論練習

1、在屬性前新增_____unique_____關鍵字可以保證表中該屬性下沒有重複的欄位。

2、對查詢結果進行排序的關鍵字是_____order by_____。

3、模糊查詢中,’%’和’_’的區別是什麼?

%:代表一或多個字元
_:代表一個字元

上機練習

1、 下面的語句是否可以執行成功?

select ename , job , sal as salary from emp;

2、 下面的語句是否可以執行成功?

select * from emp;

3、 找出下面語句中的錯誤:

select empno , ename sal * 12 ANNUAL SALARY from emp

改:
select empno , ename,sal*12 “ANNUAL SALARY” from emp;

4、 顯示錶dept的結構,並查詢其中的全部資料。

@import “code/4.1.4.sql”

5、 顯示出表emp中的不重複的崗位job。
@import “code/4.1.5.sql”
6、 選擇員工姓名的第三個字母是A的員工姓名。
@import “code/4.1.6.sql”

7、 選擇姓名中有字母A和E的員工姓名。
@import “code/4.1.7.sql”

面試筆試題

1、在表authors中查詢以 ean 結尾的所有4個字母的作者所在的行。

請選擇以下正確的語句____A___。

A)SELECT * FROM authors WHERE au_fname LIKE ‘_ean’

B)SELECT * FROM authors WHERE au_fname LIKE ‘%ean’

C)SELECT * FROM authors WHERE au_fname LIKE ‘[_ean]’

D)SELECT * FROM authors WHERE au_fname LIKE ‘[%]ean’

2、下列的哪個子句在SELECT語句中用於排序結果集___D____?

A)Having子句 B)Where子句 C)From子句 D)Order by子句

3、使用SQL語句從表STUDENT中查詢所有姓王的同學的資訊,正確的命令是___A____。

A)SELECT * FROM STUDENT WHERE LEFT(姓名,2)=’王’

B)SELECT * FROM STUDENT WHERE RIGHT(姓名,2)=’王’

C)SELECT * FROM STUDENT WHERE TRIM(姓名,2)=’王’

D)SELECT * FROM STUDENT WHERE STR(姓名,2)=’王’

4、___unique_____能夠去掉查詢中重複的行。

5、‘P%’表示__C____。

A)以P開頭 B)以P結束 C)第二個字母是P D)右面第二個字母是P。

6、在表emp中查詢欄位empno中以兩個數字開頭第三個字元是下畫線“_”的所有記錄。

請選擇以下正確的語句___D____:

A)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9]_%’

B)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9]_[%]’

C)SELECT * FROM employee WHERE empid LIKE ‘[0-9]9[_]%’

D)SELECT * FROM employee WHERE empid LIKE ‘[0-9][0-9][_]%’

Excise 4.2

上機練習

1、 對scott使用者下的表進行多表連結查詢:

① 在一張表中,顯示所有員工的姓名ename,部門號deptno和部門名稱dname。
@import “code\4.2.1.sql”

② 查詢20號部門員工的job和20號部門的loc。

@import “code\4.2.2.sql”

③ 選擇所有有獎金comm的員工的ename , dname , loc。
@import “code\4.2.3.sql”

④ 選擇在DALLAS工作的員工的ename , job , deptno, dname。
@import “code\4.2.4.sql”

⑤ 選擇所有員工的姓名ename,員工號deptno,以及他的管理者mgr的姓名ename和員工號deptno,結果類似於下面的格式

employeesEmpmanagerMgr
SMITH7369FORD7902

@import “code\4.2.5.sql”

⑥ 查詢各部門員工姓名和他們所在位置,結果類似於下面的格式

DeptnoEnameLoc
20SMITHDALLAS

@import “code\4.2.6.sql”

Excise 4.3

理論練習
1、 聚合函式中,表示最小值的函式是____ MIN() ____ ,表示最大值的函式是____MAX()_____ ,求和函式是___SUM()_____ ,求平均值的函式是____AVG()____ ,用來計數的函式是___COUNT()_____ 。

2、 對記錄的分組是通過關鍵字_____GROUP BY_____實現的。

3、 分組查詢時,用於過濾掉不符合條件的組的子句是____HAVING____。

上機練習

1、 基於scott.emp表進行一下查詢:

① 查詢公司員工工資的最大值,最小值,平均值,總和
@import “code\4.3.1.sql”

② 查詢各種job的員工工資的最大值,最小值,平均值,總和
@import “code\4.3.2.sql”

③ 查詢各種job的員工人數(提示:對job進行分組)
@import “code\4.3.3.sql”

④ 查詢員工最高工資和最低工資的差距(DIFFERENCE)
@import “code\4.3.4.sql”

⑤ 查詢各個管理者手下員工的最低工資,其中最低工資不能低於800,沒有管理者的員工不計算在內
@import “code\4.3.5.sql”

⑥ 查詢所有部門的名字dname,所在位置loc,員工數量和工資平均值
@import “code\4.3.6.sql”

⑦ 查詢公司的人數,以及在1980-1987年之間,每年僱用的人數,結果類似下面的格式

total1980198119821987
303467

@import “code\4.3.7.sql”

面試筆試題

1、____GROUP BY____子句實現對一個結果集進行分組和彙總。

2、假定Emp表中共有14行記錄,有三條記錄Comm欄位為NULL,則Select count(*) from emp和Select count(Comm) from emp分別返回___14_11____。

3、____AVG()____函式返回的是滿足給定條件的平均值。

4、下面有關HAVING子句描述錯誤的是___B____。

A)HAVING子句必須與GROUPBY子句同時使用,不能單獨使用。

B)使用HAVING子句的同時不能使用WHERE子句。

C)使用HAVING子句的同時可以使用WHERE子句。

D)使用HAVING子句的作用是限定分組的條件。

5、____COUNT____函式返回的是滿足給定條件的記錄數。

Excise 4.4

上機練習

1、 查詢和scott相同部門的員工姓名ename和僱用日期hiredate;

@import “code\4.4.1.sql”

2、 查詢工資比公司平均工資高的所有員工的員工號empno,姓名ename和工資sal;

@import “code\4.4.2.sql”

3、 查詢和姓名中包含字母u的員工在相同部門的員工的員工號empno和姓名ename;
@import “code\4.4.3.sql”

4、 查詢在部門的loc為NewYork的部門工作的員工的員工姓名ename,部門名稱dname和崗位名稱job;
@import “code\4.4.4.sql”

5、 查詢管理者是king的員工姓名ename和工資sal。
@import “code\4.4.5.sql”

面試筆試題

1、 rowid,rownum的定義分別是什麼?

rowid 是實體地址,用於定位 oracle 中具體資料的物理儲存位置, 查詢中不會發生變化
rownum 是根據 sql 查詢出的結果給每行分配一個邏輯編號,sql 不同可能會導致 rownum 不同

Excise 5.1

理論練習

1、 在Oracle中,表示不等於的操作符有兩種,分別是___<>
_!=_____。

2、在Oracle中,連線操作符用____||___表示。

3、在Oracle中,集合操作符有四種,分別為___MINUS ____ 、____ INTERSECT ____、 ___ UNION ALL _______、 ___ UNION_____。

上機練習

1、 查詢工資大於1600的員工姓名和工資;

select ename, sal from emp  where sal>1600;

2、 選擇工資不在4000到5000的員工的姓名和工資;

select ename,sal  from emp  where sal  not between 4000 and 5000;

3、 選擇僱用時間在1981-2-19到1981-12-3之間的員工姓名,JOB和僱用時間HIREDATE;

Select ename, job, hiredate 
from emp  where hiredate
between to_date('1981-2-19','YYYY-mm-dd')
and  to_date('1981-12-3','YYYY-mm-dd');

4、 選擇在20和30號部門工作的員工姓名和部門號;

select ename,deptno from emp where deptno in(20,30);

5、 選擇在1987年僱用的員工的姓名和僱用時間;


Select ename,hiredate

from emp

where hiredate  between to_date('1987-1-1','YYYY-mm-dd')

and  to_date('1987-12-31','YYYY-mm-dd');

6、 選擇公司中沒有管理者的員工姓名及JOB;


select ename,job

from emp

where mgr is null;

7、 選擇公司中有獎金的員工姓名,工資和獎金級別;


select ename,sal,comm

from emp

where comm is not null

and comm>0;

8、 連線表emp的全部列,各個列之間用逗號連線,列頭顯示成OUT_PUT(提示:使用連線符||)。

select EMPNO|| ',' || ENAME || ',' || JOB || ',' || MGR || ',' || HIREDATE || ',' || SAL || ',' || COMM || ',' || DEPTNO as "OUT_PUT" from emp;

面試筆試題

1、 Oracle中字串用什麼符號連結?
||

2、設欄位變數"工作日期"為日期型,"工資"為數值型,則要表達"工齡大於30年,工資高於1500,且低於1800元"這命令,其表示式是___C____。

A)工齡>30.AND.工資>1500.AND.工資<1800

B)工齡>30.AND.工資>1500.OR.工資<1800

C)INT((DATE()-工作日期)/365)>30.AND.工資>1500.AND.工資

D)INT((DATE()-工作日期)/365)>30.AND.(工資>1500.OR.工資<1800)

3、oracle中的操作符包括哪些型別?

算術,邏輯,比較,集合,連線

Excise 5.2

理論練習

1、 SQL函式分為單行函式、____ 分析函式 ____ 、___聚合函式_____三種。

2、 常用的分析函式有____ row_number() ____ 、____ rank() ____ 、 ____ dense_rank() ____三種。

面試筆試題

1、 說說Oracle中經常使用到的函式。

字串常用函式、處理數值型別的函式、格式轉換函式、日期函式

2、獲得當前系統時間的查詢語句是___C____。

A)Sysdate B)Select Sysdate

C)Select Sysdate from dual D)以上都可以

Excise 6.1

理論練習

1、資料庫用來控制共享資源併發訪問的機制是____資料庫併發控制____。

Excise 6.2

理論練習

1、 按照鎖的粒度進行分類,鎖分為____表級鎖____、 ____行級鎖____和資料庫級鎖。

2、 鎖的粒度和系統開銷成________比例關係。

面試筆試題

1、 Oracle的鎖有幾種,定義分別是什麼?
按照鎖的粒度進行分類,鎖分為表級鎖和行級鎖和資料庫級鎖。

2、關於For update 子句和For update of 欄位說法正確是__C__。

A)沒有區別

B)前者只鎖定當前表中的相關行,而後者鎖定所有相關表的行

C)前者鎖定所有相關表中的行,而後者鎖定當前表的相關行

D)以上說法均不正確

Excise 6.3

理論練習

1、 兩個事務相互等待對方釋放資源時,就會形成___死鎖_____。

面試筆試題

1、 解釋什麼是死鎖,如何解決Oracle中的死鎖?

是指兩個會話,每個會話都持有另外一個會話想要的資源,因爭奪資源而造成的一種互相等待的現象,此時就會出現死鎖,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。Oracle對於“死鎖”採取的策略是回滾其中一個事務,讓另外一個事務順利進行。

2、Oracle中用來釋放鎖的語句有___A____。(選擇2項)

A)Rollback B)Commit C)Drop Lock D)Unlock

Excise 6.4

理論練習

1、 Oracle表有哪幾種類型?
1)堆表:heap table :資料儲存時,行是無序的,對它的訪問採用全表掃描。
2)分割槽表 表>2G
3)索引組織表(IOT)
4)簇表
5)臨時表
6)壓縮表
7)巢狀表

Excise 6.5

理論練習

1、 什麼是表分割槽技術?

資料分割槽是一種物理資料庫的設計技術,它的目的是為了在特定的SQL操作中減少資料讀寫的總量以縮減響應時間。

分割槽並不是生成新的資料表,而是將表的資料均衡分攤到不同的硬碟,系統或是不同伺服器儲存介子中,實際上還是一張表。

Excise 6.6

理論練習

1、 常用的分割槽方法有4中,分別為___範圍分割槽__ 雜湊分割槽間隔分割槽列表分割槽____。

2、 依據HASH函式執行操作的表分割槽技術為___雜湊分割槽_____。

面試筆試題

1、Oracle分割槽是怎樣優化資料庫的?

Oracle的分割槽可以分為:列表分割槽、範圍分割槽、雜湊分割槽、複合分割槽。
1). 增強可用性:如果表的一個分割槽由於系統故障而不能使用,表的其餘好的分割槽仍可以使用;
2). 減少關閉時間:如果系統故障隻影響表的一部份分割槽,那麼只有這部份分割槽需要修復,可能比整個大表修復花的時間更少;
3). 維護輕鬆:如果需要得建表,獨產管理每個公區比管理單個大表要輕鬆得多;
4). 均衡I/O:可以把表的不同分割槽分配到不同的磁碟來平衡I/O改善效能;
5). 改善效能:對大表的查詢、增加、修改等操作可以分解到表的不同分割槽來並行執行,可使執行速度更快
6). 分割槽對使用者透明,終端使用者感覺不到分割槽的存在。

Excise 6.7

理論練習

1、 有哪幾種常用的分割槽維護操作?

新增分割槽、刪除分割槽、截斷分割槽、合併分割槽、拆分分割槽、接合分割槽、重新命名分割槽

Excise 7.1

理論練習

1、 Oracle資料庫物件又稱為___模式物件_____物件。

2、資料庫物件是邏輯結構的集合,最基本的資料庫物件是____表和檢視,其他常用的資料庫物件包括約束__、___序列、__函式、___儲存過程___。

Excise 7.2

理論練習

1、 同義詞有兩種型別,其中,只能在模式內訪問,且不能與當前模式物件同名的同義詞稱為____私有同義詞____,可被所有的資料庫使用者訪問的是 ___ 公有同義詞_____。

2、 建立同義詞的語法關鍵字是___synonym_____。

Excise 7.3

理論練習

1、 用來生成唯一、連續序號的物件是___序列_____。

2、 建立序列的語法關鍵字是____sequence____。

面試筆試題

1、在下列各選項中,關於序列的描述哪一項是不正確的___D___?

A)序列是Oracle提供的用於產生一系列唯一數字的資料庫物件

B)序列並不佔用實際的儲存空間

C)使用序列時,需要用到序列的兩個偽列NEXTVAL與CURRVAL。其中,NEXTVAL 將返回序列生成的下一個值,而CURRVAL返回序列的當前值

D)在任何時候都可以使用序列的偽列CURRVAL,以返回當前序列值

Excise 7.4

理論練習

1、 檢視的本質是一個____select____語句,被編譯後儲存在資料字典裡。

2、 建立檢視所依據的表稱為____檢視____。

3、 檢視的優點有哪些?

4、 建立檢視的語法關鍵字是___create view_____。

5、 _____with check option______語句可以幫助檢查更新檢視資料時,是否符合檢視查詢事實的一些規範。

面試筆試題

1、 在檢視上使用DML語句有哪些限制?

a)可以在簡單檢視中執行 DML操作
b)當檢視定義中包含以下元素之一時不能使用delete:
i.組函式
ii.GROUP BY子句
iii.DISTINCT關鍵字
iv.ROWNUM 偽列 DUAL偽表
c)當檢視定義中包含以下元素之一時不能使用update:
i.組函式
ii.GROUP BY子句
iii.DISTINCT關鍵字
iv.ROWNUM 偽列
v.列的定義為表示式
d)當檢視定義中包含以下元素之一時不能使用insert:
i.組函式
ii.GROUP BY子句
iii.DISTINCT關鍵字
iv.ROWNUM 偽列
v.列的定義為表示式
vi. 中非空的列在檢視定義中未包括

2、 怎樣建立一個檢視,檢視的好處是什麼,檢視可以控制權限麼?

建立:
create or replace view [viewname] as …
好處:
1.封裝查詢
2.靈活的控制安全性
控制權限:
可以

3、關於建立檢視的正確的說法是___BC____。(選擇2項)

A)只能基於基表建立檢視

B)定義檢視的查詢不能包含Order By, Compute By 和 Into子句

C)不能將預設值、規則和觸發器與檢視相關聯

D)在檢視中修改列名會影響基表的列名

Excise 7.6

理論練習

1、 從索引的特性上進行劃分,索引型別分為普通索引、反向索引唯一索引____、全文索引、函式索引、點陣圖索引。

2、 建立索引的語法關鍵字是___create index_____。

3、 _____唯一___索引確保在定義索引的列中沒有重複值。

4、 在低基數的列上,以及經常使用聚合函式的操作上建立索引,通常選擇建立____點陣圖索引____。

面試筆試題

1、 怎樣建立一個索引?索引使用的原則有哪些?有什麼優點和缺點?

建立索引:create index

使用原則:
1. 最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整;
2. =和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式;
3. 儘量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示欄位不重複的比例,比例越大我們掃描的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別欄位可能在大資料面前區分度就是0,那可能有人會問,這個比例有什麼經驗值嗎?使用場景不同,這個值也很難確定,一般需要join的欄位我們都要求是0.1以上,即平均1條掃描10條記錄;
4. 索引列不能參與計算,保持列“乾淨”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是資料表中的欄位值,但進行檢索時,需要把所有元素都應用函式才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(’2014-05-29’);
5. 儘量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可。

優點:

  • 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。
  • 可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。
  • 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。
  • 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。
  • 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

缺點:

  • 建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。
  • 索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
  • 當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

Excise 8.1

理論練習

1、 過程語言與結構化查詢語言結合而成的程式語言簡稱為____ PL/SQL ____ 。

2、 ____PL / SQL塊____是構成PL/SQL程式的基本單元。

3、 PL/SQL塊分為三部分,包括____ declare ______ 、 ____ begin _____、 ____ exception _____。

4、 在PL/SQL中,賦值操作符用______:表示,’||’表示連線操作符,單行註釋用#表示,多行註釋用_/* */_表示,標籤用<< >>表示,’…’表示範圍____操作符。
5、 判斷:PL/SQL區分大小寫。(

面試筆試題

1、PL/SQL塊中不能直接使用的SQL命令是___A____。(選擇1項)

A)SELECT B)INSERT C)UPDATE D)DROP

Excise 8.2

理論練習

1、 在PL/SQL當中,_____屬性型別_____用於引用資料庫列的資料型別,以及表示表中一行的記錄型別的。

2、 屬性型別有兩種,其中,引用變數和資料庫列的資料型別稱為___ 列型別 _____ ,用____ %type ____ 表示;提供表示表中一行的記錄型別稱為____ 行型別 ____ ,用_____ %row type ___表示。

3、 使用屬性型別的優點有哪些?

不需要知道被引用的表列的具體型別
如果被引用物件的資料型別發生改變, PL/SQL 變數的資料型別也隨之改變

面試筆試題

1、宣告%TPYE型別的變數時,伺服器將會做什麼操作____ A ___?

A)為該變數檢索資料庫列的資料型別 B)複製一個變數

C)檢索資料庫中的資料 D)為該變數檢索列的資料型別和值

2、定義SQL塊%TYPE有什麼好處

使得 PL/SQL 更加靈活,更加適應於對資料庫定義的更新

3、在PL/SQL塊中定義一個名為PI值為3.14的Real型常量的語法是____D___。

A)Pi Const Real=3.14; B)Pi Real Const =3.14;
C)Constant Pi Real:=3.14 D)Pi Constant Real:=3.14

Excise 8.3

理論練習

1、 PL/SQL支援的流程控制結構包括___順序控制_____、 ____ 條件控制 ____ 、____迴圈控制____三種。

2、 在PL/SQL語言當中,條件控制包括___if ____ 和 ____ case ____ 兩種語句;迴圈控制包括 ___ loop _____ 、 ____ for ____ 、___ while _____ 三種迴圈結構。

3、 跳轉結構語句包括____ goto ____ 、 ____ null ____ 兩種,其中,____ goto ____語句實現無條件轉到標籤指定的語句, ___ null ____語句是什麼也不做的空語句。

面試筆試題

1、舉例說明while…loop/for…loop迴圈語句,如插入1…10的值到一個單欄位資料表(結構自定義)。

i:=1;
while i<=10 loop
insert into test(id) values(i);
i:=i+1;
end loop;
commit;

2、判斷下面不完整的 loop語句:

LOOP

INSERT INTO inventory (id_number, description)

VALUES (v_id_number, v_description);

v_counter := v_counter +1;

________END LOOP_________命令應被加入,為了有條件的停止 loop 執行?

3、有一段PL/SQL程式如下所示:


var1 := 10;

LOOP

EXIT WHEN var1 > 12;

var1 := var1 +1;

DBMS_OUTPUT.PUT_LINE(‘A’);

END LOOP;

輸出為________AAA______________。

Excise 8.4

理論練習

1、 在PL/SQL中,執行程式時出現的錯誤稱為___異常_____。

2、 PL/SQL的異常有兩種型別,其中,當程式違反Oracle規則或者超越系統限制時隱式引發的異常稱為____預定義異常______;使用者在宣告部分定義的異常稱為 _____ 使用者定義異常 _____ ,該異常可以通過 ____ RAISE____語句顯式引發。

3、 表示“除數為0錯誤”的系統異常的關鍵字為 ___ ZERO_DIVIDE_____ ,表示“查詢多行錯誤”的系統異常的關鍵字為 ___ No_rows_found _____ ,表示“非法數字”的系統異常關鍵字為___Invalid_Number _____ ,表示“未查到資料”的異常關鍵字為___ No_Data_rows_found _____。

面試筆試題

1、當Select語句沒有返回行時,將引發下列哪個異常___A____?

A)No_rows_found B)No_data_found C)No_Data_rows_found D)Invalid_Number

2、以零作除數時會引發___B____異常。

A)VALUE_ERROR B)ZERO_DIVIDE C)STORAGE_ERROR D)SELF_IS_NUL

Excise 8.5

理論練習

1、 PL/SQL語言的優點有哪些?

1、SQL 的支援
2、面向物件的支援
3、良好的效能
4、高效性
5、可移植性
6、與SQL 緊密結合
7、高度安全

面試筆試題

1、 下面哪個操作會導致使用者連線到Oracle資料庫,但不能建立表( A )。

A 授予了CONNECT的角色,但沒有授予RESOURCE的角色

B 沒有授予使用者系統管理員的角色

C 資料庫例項沒有啟動

D 資料庫監聽沒有啟動

Excise 9.1

理論練習

1、PL/SQL用____遊標____來管理SQL的SELECT語句。

2、什麼是遊標?

L/SQL 是用遊標來管理 SQL 的 SELECT 語句的 . 遊標是為了處理這些語句而分配的一大塊記憶體 . 它提供了對一個結果集進行逐行處理的能力 , 可看作是一種特殊的指標 . 它與某個查詢結果集相關聯 , 可以指向結果集的任意位置 , 以便對指定位置的資料進行處理 . 使用它可以在查詢資料的同時對資料進行處理

3、遊標與某個查詢結果集相關聯,可以指向結果集的任意位置,可以看作是一種特殊的____ 指標 ____。

4、遊標的型別分為___ 隱式遊標 ____ 、 ____ 顯式遊標 ____ 、 __ REF 遊標 _______三種。

面試筆試題

1、如何使用Oracle的遊標?

宣告遊標
開啟遊標(將資料儲存到遊標)
根據遊標提取資料
關閉遊標

2、在定義遊標時使用的FOR UPDATE子句的作用是____C___。

A)執行遊標 B)執行SQL語句的UPDATE語句

C)對要更新表的列進行加鎖 D)都不對

Excise 9.2

理論練習

1、 自動宣告、開啟和關閉的遊標稱為___ 隱式遊標 _____。

2、 什麼情況下自動建立隱式遊標?

使用 DML 語句(增刪改)和單行查詢語句(賦值)時

3、 隱式遊標的屬性有哪些?

%FOUND – SQL 語句影響了一行或多行時為 TRUE
%NOTFOUND – SQL 語句沒有影響任何行時為 TRUE
%ROWCOUNT – SQL 語句影響的行數,沒有影響任何行,返回 0 ,在執行任何 DML 語句前,值為 NULL
%ISOPEN - 遊標是否開啟,隱式遊標始終為 FALSE( 隱式遊標執行時開啟,結束時立即關閉 )

Excise 9.3

理論練習

1、 由PL/SQL程式設計師定義和命名的遊標稱為___ 顯式遊標 _____。

2、 需要手動開啟,手動關閉的遊標是____ 顯式遊標____。

3、 當用戶需要從遊標中提取多行記錄時,經常使用的遊標是____ 顯式遊標____。

面試筆試題

1、 簡述使用帶引數顯式遊標的四個步驟。

宣告遊標、開啟遊標、提取遊標指向資料給變數、關閉遊標

–>

2、 作家資訊表Auths包含兩個欄位

Author_CodeVARCHAR2(50)
SalaryNUMBER(10)

其中Author_Code為作家程式碼,主鍵。Salary為作家工資額,非空。

現由於工資調整,對於作家程式碼在‘A00001′和‘A00006′;之間的作家工資少於或等於五百,則給該作家增加15%的工資,對於大於500到1000之間則增加12%,其它則增加10%。如下程式是通過遊標方式實現的,請填寫程式中相應的空格。

DECLARE

– 宣告兩個變數,用來接收遊標返回的工資和作家程式碼
v_Salary __ NUMBER(10) ______
v_Code ___ VARCHAR2(50)_____
v_ErrText __ VARHCAR(200) __ ;
– 宣告遊標 c_Salary ,該遊標的結果集是 Auths 表中作家程式碼 (Author_Code) 值是
– ‘A00001′ 到 ‘A00006′ 的工資值 (Salary ) 和作家程式碼值 (Author_Code)
CURSOR c_Salary IS
SELECT Salary,
Author_Code
FROM Auths
WHERE Author_Code >=’A00001′
AND Author_Code <=’A00006′;
BEGIN
– 開啟遊標
open __ c_Salary ; _____
LOOP
– 遊標迴圈,將遊標查詢結果集中的一行儲存到兩個臨時變數中
select
c_Salary INTO v_Salary, v_Code ___;
– 當結果集中沒有行是退出
EXIT WHEN ___ NO_DATA_FOUND _____ ;
– 如果該作家的工作少於或等於五百,則給該作家增加 15% 的工資
– 500 到 1000 之間則增加 12%, 其他增加 10%
IF v_Salary <= 500 THEN
UPDATE Auths
SET Salary = _ Salary+Salary*0.15 _______
WHERE Author_Code = v_Code;
ELSIF v_Salary <= 1000 THEN
UPDATE Auths
SET Salary = Salary + Salary * 0.12
WHERE Author_Code = v_Code;
___ THEN UPDATE Auths
SET Salary = Salary + Salary * 0.1
WHERE Author_Code = v_Code;
END IF;
END LOOP;
_ CLOSE _c_Salary
_;
________;
EXCEPTION
WHEN OTHERS THEN
CLOSE c_Salary;
ROLLBACK;
v_E rrText := ________;
DBMS_OUTPUT.PUT_LINE(‘ 程式異常終止,出現一下錯誤 :’||v_ErrText);
END;

Excise 9.5

理論練習

1、 遊標變數的優點和限制有哪些?

遊標變數的優點有:
可從不同的 SELECT 語句中提取結果集
可以作為過程的引數進行傳遞
可以引用遊標的所有屬性
可以進行賦值運算
使用遊標變數的限制:
不能在程式包中宣告遊標變數
FOR UPDATE 子句不能與遊標變數一起使用
不能使用比較運算子

Excise 10.1

理論練習

1、____儲存過程是一組為了完成為了完成特定功能的SQL語句集 _的符合資料庫程式指令碼規範的程式,經過編譯後儲存在資料庫_中,然後由一個應用程式或者其他PL/SQL程式執行_____。

2、從根本上講,過程就是___儲存在資料庫中的____的PL/SQL程式塊。

3、建立過程的語法關鍵字是____create procedure_____。

4、建立帶有輸出引數的過程,引數前面要加引數型別為____out____。

面試筆試題

1、 談談儲存過程的優缺點。

優點:
1.執行速度比普通sql快。
2.減少網路傳輸
3.可維護性更好
4.安全性更強
5.可擴充套件性更強
缺點:
1.面對複雜的業務邏輯,過程化的處理會很吃力
2.開發除錯複雜
3.無法應用快取。
4.不支援群集

2、下面哪些關於儲存過程的描述是正確的___ABD____?(選擇3項)

A)儲存過程是一組預編譯的SQL語句 B)儲存過程可加快查詢的執行速度

C)不可以在儲存過程內引用臨時表 D)幫助實現模組化、程式設計

3、PL/SQL過程的引數模式有____ABC___。(選擇3項)

A)In B)Out C)In Out D)Ref

4、儲存過程中的傳出引數使用____out/inout____關鍵字。

Excise 10.2

理論練習

1、 有返回值的,命名的PL/SQL子程式稱為____函式____。
2、 定義函式的限制有哪些?

3、 訪問函式有哪兩種方式,對應的語法是怎樣的?
plsql語句呼叫 fun()
dual呼叫:用dual偽表進行顯示,select 函式名(引數) from dual;

4、 建立函式的語法關鍵字是____create function_____。

面試筆試題

1、Oracle中function和procedure,以
及遊標的區別?

1). 可以理解函式是儲存過程的一種
2). 函式可以沒有引數,但是一定需要一個返回值,儲存過程可以沒有引數,不需要返回值
3). 函式return返回值沒有返回引數模式,儲存過程通過out引數返回值, 如果需要返回多個引數則建議使用儲存過程
4). 在sql資料操縱語句中只能呼叫函式而不能呼叫儲存過程

Excise 10.3

理論練習

1、 將相關的過程、函式、變數、遊標和異常等物件進行封裝,得到___程式包_____。

2、 程式包由_____ 包元素 ___ 和____ 包體 ___ 兩部分組成,其中,在 ___ 包元素 _____ 中宣告程式包中的公共物件,在___ 包體 ____中宣告程式包中的私有物件,以及實現在包規範中宣告的子程式和遊標。

3、 建立程式包的語法關鍵字是___create package_____。

4、 判斷:語句:drop package package_name;,刪除的是程式包的主體。(

5、 程式包的優點有哪些?

簡化應用設計、提高應用效能、實現資訊隱藏、子程式過載。

Excise 11.1

理論練習

1 、特定事件出現時,自動執行的儲存過程稱為 __ 觸發器 ______ 。
2 、判斷:觸發器可以自動觸發,也可以被顯式呼叫。(
3 、判斷:觸發觸發器的特定事件可以是執行查詢的 DML 語句。(
4 、觸發器由 ___ 觸發事件 _____ 、 ____ 觸發條件 ____ 、 __ 觸發操作 ______ 三部分組成。
5 、按觸發事件的不同,觸發器分為 ___DML觸發器 _____ 、 ___ INSTEAD OF 觸發器 _____ 、 ___ 系統觸發器 _____ 三大類。

面試筆試題

1、能夠自動執行操作的儲存物件是: ___ 觸發器 ___ 。

Excise 11.2

理論練習

1、 DML觸發器分為____ 行級觸發器 ____和 ____ 語句級觸發器 ____兩類。

面試筆試題

1、 怎樣建立一個觸發器?觸發器的定義是怎樣的?觸發器的遊標怎樣定義?

建立觸發器:
CREATE TRIGGER trigger_name {INSERT | DELETE | UPDATE} ON table_name
PL/SQL_BLOCK | CALL procedure_name;

觸發器的定義:
當某個事件發生時自動地隱式執行

定義觸發器的遊標:
ALTER TRIGGER [dbo].[deleteClassSetTrigger] --新建觸發器
ON [dbo].[t_d_ExercitationClassSet] --在某個表中新建的觸發器
for delete --做的什麼操作觸發觸發器
AS
BEGIN
declare @id int --定義變數id
declare cur_delete cursor --定義遊標
for
select ExercitationClassSetId from deleted --從刪除的資料中找到某個欄位值
open cur_delete --開啟遊標
fetch next from cur_delete into @id
while @@fetch_status=0
begin
delete t_d_ExercitationClass where ExercitationClassSetId=@id --執行符合條件的SQL語句
fetch next from cur_delete into @id --查詢下一條資料
end
close cur_delete --關閉遊標
deallocate cur_delete --刪除遊標引用
end

Excise 11.3

理論練習

1 、INSTEAD OF 觸發器是定義在 __ 檢視 ______ 上的觸發器,該觸發器只能是 ____ 行級 ____ (行級 or 語句級)觸發器,定義該觸發器必須加上 ____ FOR EACH ROW ______ 語句。

2、 INSTEAD OF 觸發器不能包含 ___ WHEN _____ 子句,不能包含 __ BEFORE ______ 和 ____ AFTER ____ 選項。

Excise 11.4

理論練習

1、 被Oracle系統事件自動觸發的觸發器稱為____系統觸發器 _____。

2、 執行哪些操作可以觸發系統觸發器?

啟動和關閉觸發器
使用者登入和退出
DDL操作

綜合設計題

主觀題 (100.0)
1、在某軟體公司裡,要建立一個數據庫來管理員工和專案,其中職員的資訊包括(員工編號、姓名、性別、生日、祖籍、工資),要求員工編號不能重複,姓名必須填寫,性別如果不做特別說明預設為男,而且不能填寫除‘男’或‘女’之外的其它任何字;工資必須大與0;專案的資訊包括(專案編號、專案名稱、起始日期、結束日期、預算),要求專案編號從1001號起每個專案遞增1,專案名稱不能重複且不可空著。注意:職員是要做專案的!!

要求:

  1. 在sqlplus環境中使用system使用者登入到伺服器

C:\Users\62531>sqlplus sys/1@orcl as sysdba;

SQL*Plus: Release 11.2.0.2.0 Production on 星期四 12月 24 16:34:16 2020

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

連線到:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

  1. 使用自己名字的縮寫建立一個數據庫使用者(如張三丰:zhangsf第一個字全拼,其它字只寫第一個字母)

  2. 授予使用者create table 、create session 許可權和resource 角色

  3. 在PL/SQL Developer 中使用建立的使用者登入並開啟一個SQL視窗

  4. 建立使用者及表,並建立相應的約束

SQL> create user xvbn identified by 1;

User created


SQL> grant create table,create session  to xvbn;

Grant succeeded


SQL> grant resource to xvbn;

Grant succeeded

的資訊包括(員工編號、姓名、性別、生日、祖籍、工資),要求員工編號不能重複,姓名必須填寫,性別如果不做特別說明預設為男,而且不能填寫除‘男’或‘女’之外的其它任何字;工資必須大與0;專案的資訊包括(專案編號、專案名稱、起始日期、結束日期、預算),要求專案編號從1001號起每個專案遞增1,專案名稱不能重

create table clerk(
  cno number unique,
  cname varchar2(10) not null,
  csex varchar2(2) default '男' check(csex in ('男','女')),
  cbir date,
  chome varchar(10),
  csalary check(csalary>0)
);

create seqeunce PNO_SEQ
  start with 1 
  increment by 1;

create table project(
  no varchar2,
  cname,
  csex,
  cbir,
  chome,
  csalary
);

create or replace trigger "TRIG_SEQ_PNO" before insert on project
for each row
 when (new."pno" is null)
begin
  :new.pno := PNO_SEQ.nextval;
end;

create table cp(
cno number;
pno number;
);

  1. 使用語句插入以下員工資訊和專案資訊
EMPNOENAMEESEXBIRTHDAYADDRESSSALARY
1王曉明1980/1/3山東青島8900
2王涵1978/6/12廣東佛山760
3李有才1978/5/23上海7800
4張小小1982/9/7山東濟南4500
insert into clerk values(1,'王曉明','女',1980/1/3,'山東青島',8900)
insert into clerk values(2,'王涵	' ,'男',1978/6/12,'廣東佛山',760)
insert into clerk values(3,'李有才','男',1978/5/23,'上海'	,7800)
insert into clerk values(4,'張小小','女',1982/9/7,'山東濟南',4500)
ITEMIDITEMNAMESTARTDATEENDDATEMONEY
1001小型監控系統2009/8/62010/1/1100000
1002辦公網路安全2009/12/302010/10/1450000
1003電子購物廣場2009/11/302010/12/3112000
insert into project values(1001,'小型監控系統',2009/8/6,2010/1/1,100000);
insert into project values(1002,'辦公網路安全',2009/12/30,2010/10/1,450000);
insert into project values(1003,'電子購物廣場',2009/11/30,2010/12/31,12000);

9.員工參與專案的資訊如下:王曉明三個專案都參加了,王涵參與了電子購物廣場和辦公室安全專案,李有才參與了小型監控系統和辦公網路安全專案,張小小隻參與了小型監控系統一個專案

EMPNOITEMID
11001
11002
11003
21002
21003
31001
31002
41001
insert into values cp(1,1001);
insert into values cp(1,1002);
insert into values cp(1,1003);
insert into values cp(2,1002);
insert into values cp(2,1003);
insert into values cp(3,1001);
insert into values cp(3,1002);
insert into values cp(4,1001);

2、一個簡單圖書管理系統包括圖書館內書籍資訊、學校在校學生資訊以及學生借閱資訊此係統功能。分為以下三張表:|
1.圖書資訊表

欄位名稱資料型別是否可為空
圖書編號(PK)varchar2(10)
書名varchar2(50)
作者varchar2(12)
出版社varchar2(50)
出版日期date
介紹varchar2(200)

2.讀者資訊表

欄位名稱資料型別是否可為空
讀者學號(PK)number
讀者姓名varchar2(10)
讀者性別(男/女)varchar2(2)
所在系varchar2(12)
生效時間date
失效時間date
累計借書number

3.借閱表

欄位名稱資料型別是否可為空
圖書編號varchar2(10)
讀者學號number
借書日期date
還書日期date

題目:(假設表已經建立,資料已經新增)

  1. 查詢沒有借過書的學生有哪些
select distinct 讀者姓名 from 讀者資訊表 join 借閱表 on 借閱表.讀者學號=讀者資訊表.讀者學號 where 借書日期 is null;
  1. 將計算機專業的讀者借書的還書日期再加30天
update 借閱表 set 還書日期=還書日期+30 where 所在系='計算機';
  1. 查詢借書最多的讀者有哪些
select 讀者姓名 
from 讀者學號,讀者資訊表 join 借閱表 
on 借閱表.讀者學號=讀者資訊表.讀者學號
group by 讀者學號 count(圖書編號)=max(count(圖書編號) );