青軟實訓-銳聘學院-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、對資料庫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外,勾選其他專案,單擊刪除
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有哪些使用者?其預設口令和許可權是什麼?
sys | system | scott |
---|---|---|
manager | manager | tiger |
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)sno | varchar2(10) | 否 |
學生姓名sname | varchar2(20) | 是 |
2.c課程表:
欄位名稱 | 資料型別 | 是否可為空 |
---|---|---|
課程號(PK)cno | varchar2(5) | 否 |
課程名稱cname | varchar2(20) | 是 |
任課老師cteacher | varchar2(20) | 是 |
3.sc學生選課表
欄位名稱 | 資料型別 | 是否可為空 |
---|---|---|
學號sno(FK) | varchar2(10) | |
課程號cno(FK) | varchar2(5) | |
成績scgrade | varchar2(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 | 廣源 |
產品號 | 顏色 | 廠商號 |
---|---|---|
P01 | 紅 | C01 |
P02 | 黃 | C03 |
若再往產品表中插入如下記錄:
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、 用於許可權控制的命令有____REVOKR和GRANT____。
上機練習
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,結果類似於下面的格式
employees | Emp | manager | Mgr |
---|---|---|---|
SMITH | 7369 | FORD | 7902 |
@import “code\4.2.5.sql”
⑥ 查詢各部門員工姓名和他們所在位置,結果類似於下面的格式
Deptno | Ename | Loc |
---|---|---|
20 | SMITH | DALLAS |
@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年之間,每年僱用的人數,結果類似下面的格式
total | 1980 | 1981 | 1982 | 1987 |
---|---|---|---|---|
30 | 3 | 4 | 6 | 7 |
@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_Code | VARCHAR2(50) |
---|---|
Salary | NUMBER(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,專案名稱不能重複且不可空著。注意:職員是要做專案的!!
要求:
- 在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
-
使用自己名字的縮寫建立一個數據庫使用者(如張三丰:zhangsf第一個字全拼,其它字只寫第一個字母)
-
授予使用者create table 、create session 許可權和resource 角色
-
在PL/SQL Developer 中使用建立的使用者登入並開啟一個SQL視窗
-
建立使用者及表,並建立相應的約束
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;
);
- 使用語句插入以下員工資訊和專案資訊
EMPNO | ENAME | ESEX | BIRTHDAY | ADDRESS | SALARY |
---|---|---|---|---|---|
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)
ITEMID | ITEMNAME | STARTDATE | ENDDATE | MONEY |
---|---|---|---|---|
1001 | 小型監控系統 | 2009/8/6 | 2010/1/1 | 100000 |
1002 | 辦公網路安全 | 2009/12/30 | 2010/10/1 | 450000 |
1003 | 電子購物廣場 | 2009/11/30 | 2010/12/31 | 12000 |
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.員工參與專案的資訊如下:王曉明三個專案都參加了,王涵參與了電子購物廣場和辦公室安全專案,李有才參與了小型監控系統和辦公網路安全專案,張小小隻參與了小型監控系統一個專案
EMPNO | ITEMID |
---|---|
1 | 1001 |
1 | 1002 |
1 | 1003 |
2 | 1002 |
2 | 1003 |
3 | 1001 |
3 | 1002 |
4 | 1001 |
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 | 否 |
題目:(假設表已經建立,資料已經新增)
- 查詢沒有借過書的學生有哪些
select distinct 讀者姓名 from 讀者資訊表 join 借閱表 on 借閱表.讀者學號=讀者資訊表.讀者學號 where 借書日期 is null;
- 將計算機專業的讀者借書的還書日期再加30天
update 借閱表 set 還書日期=還書日期+30 where 所在系='計算機';
- 查詢借書最多的讀者有哪些
select 讀者姓名
from 讀者學號,讀者資訊表 join 借閱表
on 借閱表.讀者學號=讀者資訊表.讀者學號
group by 讀者學號 count(圖書編號)=max(count(圖書編號) );