Oracle數據庫面試題彙總

初級

1.  對字符串操作的函數?

 答:ASCII() –函數返回字符表達式最左端字符的ASCII 碼值

 CHR() –函數用於將ASCII 碼轉換爲字符

–如果沒有輸入0 ~ 255 之間的ASCII 碼值CHR 函數會返回一個NULL 值

 –應該是必須給chr()賦數字值

 concat(str,str)連接兩個字符串

 LOWER() –函數把字符串全部轉換爲小寫

 UPPER() –函數把字符串全部轉換爲大寫

 LTRIM() –函數把字符串頭部的空格去掉

 RTRIM() –函數把字符串尾部的空格去掉

 TRIM() –同時去掉所有兩端的空格

 實際上LTRIM(),RTRIM(),TRIM()是將指定的字符從字符串中裁減掉

 其中LTRIM(),RTRIM()的格式爲xxxx(被截字符串,要截掉的字符串),但是TRIM()的格式爲TRIM(要截掉的一個字符 from 被截的字符串)

 SUBSTR() –函數返回部分字符串

 INSTR(String,substring) –函數返回字符串中某個指定的子串出現的開始位置,如果不存在則返回0

 REPLACE(原來的字符串,要被替換掉的字符串,要替換成的字符串)

 SOUNDEX() –函數返回一個四位字符碼

–SOUNDEX函數可用來查找聲音相似的字符串但SOUNDEX函數對數字和漢字均只返回NULL 值 

2、 事務概念

 答案:事務是這樣一種機制,它確保多個SQL語句被當作單個工作單元來處理。事務具有以下的作用:

* 一致性:同時進行的查詢和更新彼此不會發生衝突,其他用戶不會看到發生了變化但尚未提交的數據。

* 可恢復性:一旦系統故障,數據庫會自動地完全恢復未完成的事務。

 3、oracle中查詢系統時間

 答:select sysdate from dual

 4、 觸發器的作用,什麼時候用觸發器,創建觸發器的步驟,觸發器裏是否可以有commit, 爲什麼?

 答案:觸發器是可以由事件來啓動運行的,存在於數據庫服務器中的一個過程。

 他的作用:可以實現一般的約束無法完成的複雜約束,從而實現更爲複雜的完整性要求。

 使用觸發器並不存在嚴格的限定,只要用戶想在無人工參與的情況下完成一般的定義約束不可以完成的約束,來保證數據庫完整性,那麼就可以使用觸發器。

 由於觸發器主要是用來保證數據庫的完整性的,所以要創建一個觸發器,首先要明確該觸發器應該屬於那一種(DML,INSTEAD OF,SYSTEM)因爲他們各有個的用途;其次就是要確定觸發器被觸發以後所設計到的數據。

 出發器中不可以使用COMMIT。

 5.數字函數

abs()絕對值 exp(value)e的value次冪 ceil()大於等於該值的最小整數 floor()小於等於該值的最大整數 trunc(value,precision)保留precision個小數截取value round(value,precision)保留precision個小數對value進行四捨五入 sign()根據值爲正負零返回1,-1,0 mod()取模操作 power(value,exponent)value的exponent次冪 sqrt()求平方根

 1. 初級

 6、 關係數據庫系統與文件數據庫系統的區別在那裏?關係數據庫系統一般適用那些方面?

 答案:

 關係數據庫系統文件系統的區別在於:

 首先,關係性數據庫的整體數據是結構化的,採用關係數據模型來描述,這是它與文件系統的根本區別。(數據模型包括:數據結構,數據操作以及完整性約束條件)

 其次,關係數據庫系統的共享性高,冗餘低可以面向整個系統,而文件系統則具有應用範圍的侷限性,不易擴展。

 第三,關係數據庫系統採用兩級映射機制保證了數據的高獨立性,從而使得程序的編寫和數據都存在很高的獨立性。這方面是文件系統無法達到的,它只能針對於某一個具體的應用。(兩級映射:保證邏輯獨立性的外模式/模式映射和保證物理獨立性的內模式/模式映射。外模式:用戶模式,是數據庫用戶的局部數據的邏輯結構特徵的描述。模式:數據庫全體數據的邏輯結構特徵的描述。內模式:也就是數據最終的物理存儲結構的描述。)

 第四,就是關係性數據庫系統由統一的DBMS進行管理,從而爲數據提供瞭如安全性保護,併發控制,完整性檢查和數據庫恢復服務。

 

7、 觸發器的概念,存儲過程的概念.

 答案:

 觸發器: 是存儲在數據庫中的過程,當表被修改(增、刪、改)時它隱式地被激發。

 存儲過程:是數據庫語言SQL的集合,同樣也存儲在數據庫中,但是他是由其他應用程序來啓動運行或者也可以直接運行。

 8、 基本SQL語句有哪些.

 答案:

 select、insert、update、delete、create、drop、truncate

中級

9、什麼是事務一致性 ? 選擇熟悉的數據庫實現一個事務處理,如信用卡提款.

 答案:

 事務的一致性:是事務原子性的體現,事務所對應的數據庫操作要麼成功要麼失敗沒有第三種情況。事務不管是提交成功與否都不能影響數據庫數據的一致性狀態。

 事務:用戶定義的一個數據庫操作序列,這些操作要麼全部成功完成要麼全部不做,是一個不可分割的整體。定義事務的SQL語句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。

 事務的原子性:就是事務所包含的數據庫操作要麼都做,要麼都不做.

 事務的隔離性:事務對數據的操作不能夠受到其他事務的影響。

 事務的持續性:也就是說事務對數據的影響是永久的。

 對’信用卡提款’這一事務而言就是要保證’提取到現金’和’卡帳號餘額’的修改要同時成功或失敗.

 BEGIN TRANSACTION

 讀取A的帳戶餘額BALANCE;

 BALANCE=BALANCE-AMOUNT轉帳金額;

 IF(BALANCE<0) THEN

 ROLLBACK;

 ELSE

 BEGIN

 將A的新餘額寫回;

 讀取B的帳戶餘額BALANCEB;

 BALANCEB=BALANCEB+AMOUNT轉帳金額;

 將B的新餘額寫回;

 COMMIT;

 END IF;

 END;

 

10、 實際編寫和調試存儲過程或觸發器.

 答案:

11、 實現索引的方式? 索引的原理? 索引的代價? 索引的類型?

 答案: 實現索引的方式有兩種:針對一張表的某些字段創建具體的索引,如對oracle: create index 索引名稱 on 表名(字段名);在創建表時爲字段建立主鍵約束或者唯一約束,系統將自動爲其建立索引。

 索引的原理:根據建立索引的字段建立索引表,存放字段值以及對應記錄的物理地址,從而在搜索的時候根據字段值搜索索引表的到物理地址直接訪問記錄。

 引入索引雖然提高了查詢速度,但本身佔用一定的系統存儲容量和系統處理時間,需要根據實際情況進行具體的分析.

 索引的類型有:B樹索引,位圖索引,函數索引等。

 12、 view 的概念 ? 何時應用?

 答案: view 是對錶級數據的多角度的透視,適用於對查詢安全性、靈活性有一定要求的環境

 13、 sql語句例外處理?舉例說明?

 答案: 當sql 語句在執行過程中出現意外時,如查詢時,未查詢到結果;更改時無記錄等情況的應採取的措施. 以oracle爲例:測試其對exception的理解.如select 字段 into 變量 from table ;

 若查詢出多條記錄,應增加exception 例外處理.

 Oracle處理異常有三種:

 1. 預定義的例外處理,EXCEPTION WHEN exception_name THEN

 2. EXCEPTION_INIT產生例外

 首先要declare 聲明一個例外名;然後將例外名和錯誤代碼綁定pragma exception_init(錯誤名,錯誤代碼);最後在EXCEPTION 處when 錯誤名then

 3.用戶自定義例外,不用EXCEPTION,當判斷條件成熟時用raise_application_error(-20000~~~-20999,提示信息)。

 14、 判斷下列論述是否正確。 

(1) 一個事務中的某條SQL命令提交時,其它SQL命令可以不提交。 

(2) 在一個關係表中,主鍵可唯一標識一行記錄。 

(3) 一個關係表中的外鍵必定是另一表中的主鍵。 

(4) 回滾可以在事務失敗時,回到操作事務前的數據狀態。

 答案: (1)錯誤 (2)正確 (3)正確 (4)正確

 15、 以下哪些手段可保證數據庫中數據的完整性和一致性:

 (1)自定義數據類型 

(2)觸發器 

(3)主鍵和外鍵

(4)事務

 答案: (1)(2)(3)(4) (爲什麼有1)

 16、 使用存儲過程訪問數據庫比直接用SQL語句訪問有哪些優點?

 答案:存儲過程是預編譯過的,執行時勿須編譯,執行速度更快;存儲過程封裝了一批SQL語句,便於維護數據的完整性與一致性;可以實現代碼的複用。

 高級

 17、 對於精通的數據庫系統描述其體系結構,主要包括存儲機制、回滾機制、運行機制等.

 答案:對oracle 系統而言,描述sga的結構; 後臺pmon,ckpt、lgwr,smon等進程的功能;表空間的分配策略; 回滾段的結構

 oracle的sga(系統全局區)包括的主要區有:數據庫緩存區,重做日誌緩存區,共享池(數據字典緩存和庫緩存),大池等。數據庫緩存區用來存放最近使用過的數據塊主要和後臺進程中的數據庫寫進程(DBWR)以及數據文件發生關係;重做日誌緩存區用於存放操作數據庫數據所產生的重做日誌信息,與之合作的有重做日誌寫進程(LGWR)和重做日誌文件;共享池主要緩存SQL/PLSQL,資源鎖,控制信息等,其中的庫緩存主要緩存被解析執行過的SQL/PLSQL庫緩存可分爲共享SQL和私有SQL兩個區,共享SQL用於存放SQL語句的語法分析結果和執行計劃,私有SQL則用來存放與具體SQL語句執行有關的綁定變量,會話參數等。

 ORACLE實例的另外一個重要部分就是其後臺進程,主要的後臺進程有:數據庫寫進程(DBWR),重做日誌寫進程(LGWR),系統監視器(SMON),進程監視器(PMON),檢查點進程(CKPT)。DBWR主要是對數據庫緩存區中的髒冷數據進行寫入數據文件操作;LGWR主要是將對數據庫數據操作所產生的重做日誌信息寫入到重做日誌文件中;SMON完成由於非正常關閉數據庫的情況下重起數據庫時對數據庫的恢復;PMON用來恢復失敗的用戶進程和服務進程,並釋放其所佔的系統資源;CKPT可以表示數據庫在此出處於完整狀態。

 邏輯存儲結構:數據塊BLOCK,區EXTENT,段SEGMENT,表空間TABLESPACE

 物理存儲空間:表空間,數據文件,控制文件,日誌文件,數據字典

 軟件體系結構就是上邊對SGA和後臺進程的描述。

 18 、對於精通的數據庫系統描述其數據一致性的保證機制,包括lock,事務一致性等.

 答案: 在併發環境下,採用多種機制保持其數據的一致性,如oracle系統提供的事務級的一致性、行級鎖、表級鎖等等.

 19、對精通的數據庫系統描述其聯機備份機制、恢復機制,考覈其對日誌的理解.

 答案: 描述相關數據庫的實時聯機備份策略,如數據庫系統在運行中通過何種方式保證其數據的實時備份, 出現問題時,應採取何種辦法從聯機備份進行恢復.

 對對oracle而言,其archive online 備份方式應如何設置、修改什麼參數、如何安排備份空間等等.

 20、 精通的數據庫系統描述性能優化方法,包括優化的策略、參數、驗證方法等.

 答案:

 21、Truncate; 與 delete;的區別?

(這道題可以衍生出很多的問題比如:想快速的清除一個很大的表中的數據應該用設麼操作?答案是:應該用truncate。還有,在對兩個相同紀錄數的分別表使用了truncate,和delete commit;後對這兩個表進行count(*)統計記錄數操作,那個錶速度會快些?答案是:使用了truncate的會快些。)

 22、寫一個‘遊標’並使用它。(這道題應該注意的是:在使用遊標後一定要記得關閉遊標)。

 Declare

 Cursor cursor_name is

 Select * from tablename;

 Begin

 Open cursor_name;

 Loop

 Fetch cursor_name into bianliang;

 Exit when cursor_name%notfound;

 Sql……..

End loop;

 Close cursor_name;

 End;

 23、在創建表的時候會設置

 pctfree 10

 pctused 40

 而創建表的索引的時候卻沒有

 pctused 40

 這是爲什麼?

 (這道題的主要思想是索引不能在pctused 40上得到什麼好處)

 24、使用過的最大的表有多少行紀錄?

(這道題不是看應試者的技術過不過關,而是考察應試者是否有大型數據庫的管理操作經驗)

 不要對錶的索引列進行函數操作,因爲這樣系統就不能使用索引,使查詢變得很慢,但是在ora8i以後就已經開始支持函數的索引,彌補了這個不足。

 

25、ORACLE數據庫啓動與關閉的步驟

 啓動:啓動實例—-加載數據庫數據—–打開數據庫

 關閉:關閉數據庫—-卸載數據庫數據—-關閉實例

 26、Delete與truncate的區別

 delete一般用於刪除少量記錄的操作,而且它是要使用回滾段並且要進行顯示的提交事務。而truncate則使用於大量刪除數據,而且隱式提交事務,其速度要比使用delete快的多。

 27、DDL和DML分別代表什麼??

 DDL表示數據定義語言,在ORACLE中主要包括CREATE,ALTER,DROP

 DML表示數據操作語言,主要的DML有SELECT,INSERT,UPDATE,DELETE

 28、Javascript中動態效果時調用的函數。

 29、數據庫中有若干條相同的記錄,刪除到只剩下一條記錄。如何做,請用SQL語句通過ROW_ID來寫出執行過程。

 Delete table_name where ziduan=’’ and rowed<(select max(rowed) from table_name where ziduan=’’);

 30、oracle數據庫表存放到磁盤什麼地方(什麼物理空間上——大概意思)?

 Oracle數據庫表存放在數據文件上。

 31、Oracle使用什麼語句給用戶分配權限?

 GRANT TO 語句

 32、你在項目現場,用戶要求你向正在運行的表中添加一個字段,你該怎麼做?

 第一種方法:關閉數據庫,然後使用受限模式打開,由sys/sysdba來進行

 第二種方法:不關閉數據庫,將數據庫置於靜默狀態在SYS/SYSDBA模式下用ALTER SYSTEM QUISCE RESTRICTED,這種狀態下只有SYS/SYSDBA纔可以對數據庫進行操作,修改完畢之後再退出靜默狀態ALTER SYSTEM UNQUISCE

 在這裏複習到了數據庫的兩種特殊狀態:靜默狀態(QUISCE)和掛起狀態

 靜默狀態就是隻有特殊權限的SYS/SYSDBA纔可以對數據庫進行操作,使用ALTER SYSTEM QUISCE RESTRICTED以後系統將等候活動着的會話主動結束,同時阻止建立新的會話,系統掛起所有的SQL語句,等恢復以後再重新激活會話執行掛起的SQL。

 掛起狀態就是系統將數據庫所有對物理文件(數據文件,控制文件,日誌文件)的I/O操作都暫停,但是並不禁止非DBA用戶對數據庫進行操作。這種狀態主要用於進行數據庫備份。

 

33、Oracle中回滾的概念?回滾段有什麼作用。

 回滾就是在事務提交之前將數據庫數據恢復到事務修改之前數據庫數據狀態。

 回滾段就是爲回滾提供依據,記錄的是事務操作數據庫之前的數據或者對應於以前操作的操作,這個內容要根據以前的操作而定。比如說以前事務操作如果是UPDATE那麼回滾段則存儲UPDATE以前的數據,如果事務是DELETE操作那麼存儲的則是與之相對應的INSERT操作語句,相反如果事務操作是INSERT那麼記錄相應的則是DELETE操作了。

 34、Oracle的8I和9I有什麼區別

 35、一張表有10萬條記錄,如何刪除其中的任意20條記錄?請用SQL語句進行操作

 36、客戶端如何訪問服務器端的oracle?如果客戶端無法訪問服務器端的oralce,可能會是什麼原因?

 客戶端通過網絡或者進程方式以合法的用戶身份來取得和服務器端ORACLE的連接。如果客戶端無法訪問服務器端ORACLE可能出現的原因是:用戶無權訪問;服務器端數據庫並沒有打開(啓動數據庫的第三步沒有完成);如果服務器是在共享模式下的則有可能沒有對應於該客戶所使用的通信協議的調度進程Dnnn。

 37、 oracle中執行語句錯誤時去哪裏查找錯誤信息?

 Select * from USER_ERRORS

 38、 select語句需要提交嗎?insert和update語句呢?

    Select 不要提交,其他兩個要

 39、 在執行insert語句並提交後,這些提交的數據存儲到什麼地方?

 被存儲到數據文件中

 40、 oracle中有哪些類型的文件?

 數據文件,控制文件,日誌文件和數據字典

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

 邏輯體系結構:塊,區,段,表空間

 物理體系結構:表空間,三大文件

 軟件體系結構:SGA,後臺進程

 42、 談談對oracle的row_ id是否理解?請簡述?

 ORACLE的row_id是一個僞列,其個是爲18個字節可將這18個字節用6363來劃分,分別表示段編號,數據文件編號,數據塊編號和記錄編號。

 Row_id表示的是一個記錄的物理存儲地址。

 43、 oracle中如何刪除用戶?

 Oracle中使用DROP USER來刪除用戶,如果使用DROP USER CASCADE那麼用戶的對象也同時被刪除掉。爲了達到刪除用戶的效果而又不影響對用戶下的對象的使用可以使用alter user username account lock將用戶鎖定。

 44、 客戶端對服務器端的oralce操作的流程是什麼?

 專用模式下:用戶通過應用程序進程試圖去得到一個與ORACLE數據庫服務器的連接?客戶端通過網絡傳遞連接請求,ORACLE服務器則使用監聽進程監聽用戶請求,並且來驗證用戶身份,通過驗證則爲用戶分配一專用服務進程?用戶提交SQL語句?專用服務進程則首先在SGA區的共享池中檢查是否有與該SQL語句相似的已經被解析執行並且緩存的SQL語句,如果有則採用它的解析結果和執行計劃執行SQL語句,如果沒有則對SQL語句進行語法解析生成執行計劃?通過解析則執行操作獲取數據?將執行結果返回給客戶。

 共享模式下:與專用模式不同在於當監聽程序驗證用戶的合法性以後並不爲它分配一個專用的服務進程,而是將該請求與響應的調度進程相聯繫起來,並將起放入到一個請求隊列中,最終由響應的Dnnn來從調度隊列中獲取一個請求併爲之分配一個空閒的服務進程,接下來有服務進程對該請求進行服務操作和專用方式下相同,處理完成之後由服務進程先將結果放入一個返回隊列最後再由調度進程(Dnnn)將返回隊列中的結果返回給對應的用戶。

 45、 exits和in在ORALCE數據庫中那個執行效率更高?

 Exits執行效率比in高。因爲:

 46、 如何判斷遊標已經到最後一行?

 Cursor_name%notfound

 47、 聚簇索引和普通索引在不同的SQL語句中哪個效率更高??

(筆試題,原題回憶不起來,主題就是聚簇索引和普通索引的區別)

 概念類:

 聚合函數? Session的定義和用法? Oracle的存儲過程 ? 什麼是構造函數? 

48、簡述ORACLE中SGA的組成部分。

 答:系統全局區包括:共享池、重做日誌緩存區、數據高速緩存區,大池,JAVA池。

 49、簡述ORACLE的啓動和關閉各有多少步驟?

 啓動:啓動實例、裝載數據庫數據、打開數據庫。

 關閉:關閉數據庫、卸載數據庫數據、關閉實例。

 50、在Oracle表空間的分類和作用,如排序時數據將放在什麼表空間?

 作用是爲了突破存儲容量的限制,是一個邏輯概念。排序數據放在臨時表空間。

 51、執行COMMIT命令時,數據庫將會發生什麼改變,ROLLBACK呢?

 答:commit 提交時首先是與事務對應的重做日誌信息將被寫入到數據庫物理文件中的重做日誌文件中,至於是否會真正將事務操作的內容反映到數據文件還好看DBWR是否啓動了。在完成數據庫的插入,刪除和修改操作時,只有當事務提交到數據庫纔算完成,有提交前只有操作數據庫的本人才能看到,別人只有在最後提交完成纔可以看到。

 ROLLBACK回滾當前尚未提交的事務,使數據庫恢復到事務操作前的狀態。

 52、用命令創建用戶,併爲用戶授權。

 Create user user_name

 identified by password /

 identified externally/

 identified blobally as ‘CN=user’

 default tablespace tablespace_name

 temporary tablespace tablespace_name;

 grant role/privilege to user_name;

 

53、 寫一個存儲過程,使employee(name,age,emp_no,salary)表中的salary值在0-1000之間的員工的工資上漲20%,(提示:要求用到遊標)

 Cteate or replace procedure emp_sal

 V_name employee.name%type;

 V_emp_no employee.emp_no%type;

 V_salary employee.salary%type;

 Cursor cursor_sal is

 Select name,emp_no,salary from employee where salary between 0 and 1000;

 Begin

 Open cursor_sal;

 Loop

 Fetch cursor_sal into v_name,v_emp_no,v_salary;

 Exit when cursor_sal%notfound;

 Update employee set salary=salary*1.2 where name=v_name and emp_no=v_emp_no;

 End loop;

 Close cursor_sal;

 Commit;

 End;

 54、 ORACLE數據庫都有哪些類型的文件?

 數據文件,控制文件,日誌文件,參數文件

 55、 用命令創建表空間、用戶,併爲用戶授權、收回權限。

 Create tablespace tabllespacename

 Datafile ‘f:\orcl\user001.dbf size 20m

 Default storage(

 Initial 512k

 Next 512k

 minextents 2

 pctincrease 50%

 maxExitnts 2048)

 minimum extent 512k

 logging

 online

 permanent

 extent management dictionary;

 回收權限: revoke privilege from user;

 create tablespace tablespace_name

 datafile ‘’

default storage(

 initial xxxkb

 next yykb

 minextents 2

 pctincrease nnnn

 maxextents mmm)

 logging

 online

 extent management dictionary/local[autoallocate/uniform size xxxmb];

 create user user_name

 identified by passwore/

 identified externally/

 identified globally as ‘CN=user’

default tablespace tablespace_name

 temporary tablespace tablespace_name

 [account lock /unlock]

 grant connect to user_name;

 grant create table to suer_name;

 grant update on table_name to user_name;

 revoke create table from user_name;

 revoke update on table_name from user_name;

 56、 在Oracle中如何更改用戶名?

 57、如何在Oracle中查詢某個用戶下所有已建的表?

 答:select * from cat;

 57、 執行TRUNCATE命令後,存儲空間是否還存在,是否可被其他的表佔用?

 執行TRUNCATE之後,爲表分配的區空間將被回收HWM將回退,如果在使用TRUNCATE的時候沒有指定REUSE STORAGE那麼執行操作後僅僅留下由MINEXTENTS所指定的區否則表的所有空間將被回收用於再分配。

 59、何在Oracle中查看當前用戶,通常有哪些方式?

(提示:show user和select * from user_users)show user;/select username from user_users;

 60、 出在Oracle中,創建表空間的語法結構,以及所含參數說明。

 Create tablespace tablespacename

 Datafile ‘’

 Logging/nologging

 Default storage(initial kb

 Next kb

 Minextents x

 Maxextents y

 Pctincrease z

 )

 online/not online

 extent management dictionary/local[autoallocate/uniform size kb];

 61、 如何判斷遊標是否到了末尾?(提示:用%notfound)

 cursor_name%notfound

 62、 在Oracle中,如何查看當前用戶下的所有表空間?

 Select tablespace_name from user_tablespaces;

 63、 在Oracle中,你所創建的表空間信息放在哪裏?

 存放在數據字典中,數據字典內容對應於系統表空間SYSTEM表空間。

 64、 ORACLE中的控制文件什麼時候讀取?

 ORACLE服務器啓動時,先啓動實例然後再讀取數據庫的各個文件當然也包括控制文件。也就是說在數據庫服務器啓動的第二步時讀取。

 65、 Oracle的表格信息存儲在哪個地方?

 SYSTEM表空間的數據字典文件中。

 66、如何根據字典創建一個表空間,並說明參數?

 66、 ORACLE中當一個用戶正在操作一個執行過程,管理員此時取消了他的權限,會發生什麼事情?

 

68、談談你對角色的理解,常用的角色有哪些?

 角色就是一組權限的數據庫實體,它不屬於任何模式或用戶但是可以被授予任何用戶。常用的角色有CONNECT,DBA,RESOURCE,SELECT_CATALOG_ROLE(查詢所有表視圖權),DELETE_CATALOG_ROLE(刪除權限)等。

 角色的創建和授權:和創建用戶爲用戶授權差不多。Create role role_name identified …

 grant 權限to role_name。

 69、簡述Oracle的歸檔與不歸檔工作模式,分別說明。

 Oracle歸檔模式是指在創建數據庫時指定了ARCHIVELOG參數,這種模式下,當重做日誌文件寫滿的時候會將該重做日誌文件的內容保存到指定的位置(由初始化文件中的參數ARCHIVE_LOG_DEST_n來決定)。並不是數據庫在歸檔模式下工作的時候就可以自動完成歸檔操作,在歸檔模式下可以有兩種歸檔方式:自動歸檔(在初始化文件中的參數ARCHIVE_LOG_START被設置爲TRUE)和手動歸檔。如果歸檔模式下沒有啓動自動歸檔的話,而且又沒有實行手動歸檔那麼當LGWR進程將重做日誌信息寫入已經寫滿的重做日誌文件時數據庫將會被掛起直到進行了歸檔。可見歸檔是對重做日誌文件信息的一種保護措施。

 Oracle非歸檔模式下當重做日誌文件寫滿以後若是有LGWR進行重做日誌信息的寫入操作時,以前保存在重做日誌文件中的重做日誌信息就會被覆蓋掉。

 70、Oracle索引分爲哪幾類,說出唯一索引和位圖索引的概念。

 Oracle索引有B樹索引,位圖索引,函數索引,簇索引等。

 唯一索引也是B樹索引的一種,它要求被索引的字段值不可以重複。在創建的時候使用B樹算法創建。

 位圖索引並不是採用象唯一索引那樣存儲(索引字段值,記錄ROWID)來創建索引段的,而是爲每一個唯一的字段值創建一個位圖,位圖中使用位元來對應一個記錄的ROWID。位元到ROWID是通過映射的到的。

 71、ORACLE的基本數據類型有哪些?

 Char()存儲定長字符,定義的時候可以不爲他指定長度但是如若往裏插入值則會出錯;varchar2()存儲變長字符定義的時候必須指定長度,date存儲時間日期;Number()數字類型,包括整型,浮點型等;clob()大容量字符串;blob()大二進制對象

 72、SQL中,執行四捨五入的是哪個函數?

 Round(value,保留的小數位數)與只對應的還有一個特別相似的函數trunc(value,保留的小數位數)它的作用是根據要保留的小數位數來截取原數。

 73、oracle數據庫表存放到磁盤什麼地方?數據文件

 ORACLE數據庫的表存放在物理文件中的數據文件中。

 74、當執行insert語句並提交後,這些提交的數據存儲到什麼地方??

 存儲到了數據庫的數據文件中。

 75、Exits和in在ORALCE數據庫中那個執行效率更高?

 EXITS執行效率要比使用IN要快。

 76、ORACLE自己提供的函數,想知道具體位置,如何操作?

 77、數據庫的幾種物理文件?

 1) 數據文件 2)控制文件 3)日誌文件

 78、 控制文件都含有哪些信息?

 控制文件存放有實例信息(實例名稱創建時間等),數據文件和日誌文件信息,還有系統運行時記錄的系統變更碼(SCN),檢查點信息和歸檔的當前狀態信息等。數據庫在加載數據庫的時候首先要讀取控制文件獲得和數據庫有關的物理結構信息之後才能夠正確加載數據文件和日誌文件並打開數據庫。

 79、 Decode函數的用法?

DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value等於if1時,DECODE函數的結果返回then1,…,如果不等於任何一個if值,則返回else。初看一下,DECODE 只能做等於測試,但剛纔也看到了,我們通過一些函數或計算替代value,是可以使DECODE函數具備大於、小於或等於功能。

 2. 如何用decode進行大於小於的比較?

 利用sign()函數和DECODE和在一起用

 select decode(sign(變量1-變量2),-1,變量1,變量2) from dual;

 

decode(條件,值1,翻譯值1,值2,翻譯值2,…值n,翻譯值n,缺省值)

 該函數的含義如下:

 IF 條件=值1 THEN

     RETURN(翻譯值1)

 ELSIF 條件=值2 THEN

     RETURN(翻譯值2)

     ……

 ELSIF 條件=值n THEN

     RETURN(翻譯值n)

 

ELSE

     RETURN(缺省值)

 END IF

 ? 使用方法:

 1、比較大小

 select decode(sign(變量1-變量2),-1,變量1,變量2) from dual; –取較小值

 sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1

 

例如:

 變量1=10,變量2=20

 則sign(變量1-變量2)返回-1,decode解碼結果爲“變量1”,達到了取較小值的目的。

 

2、表、視圖結構轉化

 現有一個商品銷售表sale,表結構爲:

 month    char(6)      –月份

 sell    number(10,2)   –月銷售金額

 

現有數據爲:

 200001  1000

 200002  1100

 200003  1200

 200004  1300

 200005  1400

 200006  1500

 200007  1600

 200101  1100

 200202  1200

 200301  1300

 

想要轉化爲以下結構的數據:

 year   char(4)      –年份

 month1  number(10,2)   –1月銷售金額

 month2  number(10,2)   –2月銷售金額

 month3  number(10,2)   –3月銷售金額

 month4  number(10,2)   –4月銷售金額

 month5  number(10,2)   –5月銷售金額

 month6  number(10,2)   –6月銷售金額

 month7  number(10,2)   –7月銷售金額

 month8  number(10,2)   –8月銷售金額

 month9  number(10,2)   –9月銷售金額

 month10  number(10,2)   –10月銷售金額

 month11  number(10,2)   –11月銷售金額

 month12  number(10,2)   –12月銷售金額

 

結構轉化的SQL語句爲:

 create or replace view

 v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)

 as

     select

     substrb(month,1,4),

     sum(decode(substrb(month,5,2),’01′,sell,0)),

     sum(decode(substrb(month,5,2),’02′,sell,0)),

     sum(decode(substrb(month,5,2),’03′,sell,0)),

     sum(decode(substrb(month,5,2),’04′,sell,0)),

     sum(decode(substrb(month,5,2),’05′,sell,0)),

     sum(decode(substrb(month,5,2),’06′,sell,0)),

     sum(decode(substrb(month,5,2),’07′,sell,0)),

     sum(decode(substrb(month,5,2),’08′,sell,0)),

     sum(decode(substrb(month,5,2),’09′,sell,0)),

     sum(decode(substrb(month,5,2),’10′,sell,0)),

     sum(decode(substrb(month,5,2),’11′,sell,0)),

     sum(decode(substrb(month,5,2),’12′,sell,0))

     from sale

     group by substrb(month,1,4); 

79、CASE語句的用法?

 Oracle用法很簡單:

 SELECT last_name, job_id, salary

 CASE job_id

 WHEN ‘IT_PROG’ THEN 1.10*salary

 WHEN ‘ST_CLERK’ THEN 1.15*salary

 WHEN ‘SA_REP’ THEN 1.20*salary

 ELSE salary END “REVISED_SALARY”

 FROM employees 

80、 truncate和delete的區別?

  1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。

   2、TRUNCATE是一個DDL語言而DELETE是DML語句,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。

   3、TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作後的表比DELETE操作後的表要快得多。

   4、TRUNCATE不能觸發觸發器,DELETE會觸發觸發器。

   5、不能授予任何人清空他人的表的權限。

   6、當表被清空後表和表的索引講重新設置成初始大小,而delete則不能。

   7、不能清空父表。

 81、 表空間如何擴展?並用語句寫出?

 兩種擴展方式:

 a) 增加數據文件

 alter tablespace tablespace_name add datafile ‘’ xxMB

 b) 擴展數據文件大小

 alter database datafile ‘’ resize newMB

 82、 表空間區管理方式?哪種方式現在是推薦使用的?

 a) 字典管理方式

 extent management dictionary;默認方式

 b) 本地管理方式

 extent management local[autoallocate/uniform xxmb];

 83、 用什麼函數獲得日期?和日期中的月,日,年

 to_char(sysdate,’year’):tow thsound six to_char(sysdate,’yyyy’) :2006

 to_char(sysdate,’month’):8月 to_char(sysdate,’mm’):08

 to_char(sysdate,’day’):星期4 to_char(sysdate,’dd’):22

 84、 分區表的應用?

 

a) 一個分區表有一個或多個分區,每個分區通過使用範圍分區、散列分區、或組合分區分區的行

 b) 分區表中的每一個分區爲一個段,可各自位於不同的表空間中

 c) 對於同時能夠使用幾個進程進行查詢或操作的大型表分區非常有用

 

85、 談談索引的用法及原理?

 索引是若干數據行的關鍵字的列表,查詢數據時,通過索引中的關鍵字可以快速定位到要訪問的記錄所在的數據塊,從而大大減少讀取數據塊的I/O次數,因此可以顯著提高性能。

 86、 存儲過程的應用,如何既有輸入又有輸出?

 Create procedure pro_name

 (xxxx in/out type;

 yyyy in/out/inout type;

 ) is/as

 zzzz type;

 begin

 sqlpro;

 exception

 exceptionxxxxx;

 commit;

 end;

 87、 常發生的異常有哪些?

 常用預定義例外

 CURSOR_ALREADY_OPEN — ORA-06511 SQLCODE = -6511 遊標已經打開

 DUP_VAL_ON_INDEX — ORA-00001 SQLCODE = -1 違反唯一性約束

 INVALID_CURSOR — ORA-01001 SQLCODE = -1001 非法遊標操作

 INVALID_NUMBER — ORA-01722 SQLCODE = -1722 字符向數字轉換失敗

 LOGIN_DENIED — ORA-01017 SQLCODE = -1017

 NO_DATA_FOUND — ORA-01403 SQLCODE = +100 沒有找到數據

 NOT_LOGGED_ON — ORA-01012 SQLCODE = -1012 沒有連接到數據庫

 PROGRAM_ERROR — ORA-06501 SQLCODE = -6501 內部錯誤

 STORAGE_ERROR — ORA-06500 SQLCODE = -6500

 TIMEOUT_ON_RESOURCE — ORA-00051 SQLCODE = -51

 TOO_MANY_ROWS — ORA-01422 SQLCODE = -1422 返回多行

 TRANSACTION_BACKED_OUT — ORA-00061 SQLCODE = -61

 VALUE_ERROR — ORA-06502 SQLCODE = -6502 數值轉換錯誤

 ACCESS_INTO_NULL試圖爲NULL對象的屬性賦值

 ZERO_DIVIDE — ORA-01476 SQLCODE = -1476 被零除

 OTHERS — 其它任何錯誤的處理 

88、 如何使用異常?

 在oracle中有三種類型的異常。預定義的異常 非預定義的異常 用戶定義的異常 第二種非預定義的異常是與特定的oracle錯誤關聯。並且用PRAGM EXCEPTION_INIT(EXCEPTION_NAME,ERROR_NUMBER)關聯一起的。但是到底有什麼用啊? 例如:declare dup_primary_key exception; pragma exception_init(dup_primary_key,-1); begin insert into itemfile values(‘i201′,’washer’,'spares’,100,50,250,12,30); exception when dup_primary_key then dbms_output.put_line(‘重複項編號-主鍵衝突’); end

 第一種的使用方法:exception

 when 異常名稱 then

異常處理代碼;

 第三種的用法:if 條件 then

 raise_application_error(-20000“““`-20999,提示信息);

end if;

 89、優化的策略一般包括:

 ? 內存優化

 ? 操作系統優化

 ? 數據存儲的優化

 ? 網絡優化等方法

 具體到不同的數據庫涉及到要調整不同的數據庫配置文件、不同的操作系統參數、網絡參數等等, 不同的數據庫不同

//查詢某表中的第30到40行的數據

 select * from 表名 where 字段 in( select top 40 字段 from 表名 )and 字段 not in( select top

 30 字段 from 表名)

 或者

 select top 10 * from 表名 where 字段 not in( select top 30 字段 from 表名)

 二 //查詢一個表中存在重複的字段“字段1”

 select DISTINCT 字段1 from 表名 having count(字段1)>1 group by 字段1

 (並顯示可能重複的次數)

 select DISTINCT 字段1, count(字段1) As 次數 from 表名 having count(字段1)>1 group by 字段1

 90.某門戶網站數據庫職位筆試題

 1、事務是什麼?

 2、oracle中truncate和delete命令有何區別?

 3、Oracle中char和varchar2數據類型有什麼區別?有數據”test”分別存放到char(10)和varchar2(10)

 類型的字段中,其存儲長度及類型有何區別?

 CHAR的長度是固定的,而VARCHAR2的長度是可以變化的。比如存儲的字符串是:“liming”那麼在char中佔10個字符,包括“liming” + 3個空格。在varchar2中長度爲7。

char的效率比varchar2的效率稍高。

4、參見如下表結構

 出版社:

 出版社代碼 char(2),

 出版社名稱 varchar2(32)

 

圖書:

 圖書編號 char(8),

 圖書名稱 varchar2(128),

 出版社代碼 char(2),

 作者代號 char(4),

 圖書簡介 varchar2(128)

 

作者:

 作者代號 char(4),

 作者名稱 varchar2(10),

 性別 char(1),

 年齡 number(3),

 文學方向 varchar2(64)

 

獲獎名單:

 獲獎日期 date,

 獲獎人員 char(4)

 

編寫SQL語句,找出“作者”庫中沒有出現在“獲獎名單”庫中所有作者信息的SQL語句(提示:使用not

 in、not exists以及外關聯三種方法,並說明哪種方法最優。

 

5、Oracle數據庫表存在僞列rowid,請利用rowid編寫一個SQL語句,從以下記錄中找到唯一記錄,並將其flag列更新爲Y

 No name sex flag

 1 張三 1 N

 1 張三 1 N

 1 張三 1 N

 

6、Oracle中,需要在查詢語句中把空值(NULL)輸出爲0,如何處理?

 

7、見第四題“獲獎名單”表,寫出SQL語句,查詢出在上一個月獲獎的人員。

 

8、見第四題“圖書”表,在表上對圖書名稱、出版社代碼、作者代號創建了組合索引,請問在執行如下

 語句時會不會利用到索引。

 Select * from 圖書 where 圖書名稱=’xxxx’

 Select * from 圖書 where 圖書名稱=’xxxx’ and 出版社代碼=’bb’

 Select * from 圖書 where 圖書名稱=’xxxx’ and 作者代號=’ddd’

 Select * from 圖書 where 出版社代碼=’yyy’

 

9、編寫一個簡單的Oracle存儲過程,輸出參數必須有一個是結果集。

 專家對本試卷的分析:

 第一,這張筆試卷從題目的考點上來看,屬於基礎知識類的;

 第二,從難度上分析屬於中等;

 第三,從題目的設置上來看,該公司的主要用意是考察筆試者的工作經驗和項目經驗,儘管是基礎

 知識,但是隻要沒做過開發工作,想回答上來並不容易;

 第四,通篇只有第4題最後一問涉及到了“優化”的問題,因此判斷該公司這張試題主要是面對開

 發職位的。

 

請問在ASP中能否使用一條SQL語句同時操作兩個表

 有兩表Tab1,Tab2;1和2中有兩相同字段“代碼”,‘名稱’,現欲用Tab1中的“代碼”和Tab2中‘代碼’相關聯查詢得到‘名稱’來填充Tab1中的“名稱”字段,在查詢分析器中該如何寫此語句?

 update tab1 set 名稱=tab2.名稱

 from tab1,tab2

 where tab1.代碼=tab2.代碼

 有兩表Tab1,Tab2;1和2中有兩相同字段“代碼”,‘名稱’,現欲用Tab1中的“代碼”和Tab2中‘代碼’相關聯查詢得到‘名稱’來填充Tab1中的“名稱”字段,在查詢分析器中該如何寫此語句?

 

update table1 set 名稱=b.名稱 from table1 a inner join table2 b on a.代碼=b.代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章