


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java oracle面試題及答案L什么是存儲過程,使用存儲過程的好處?存儲過程(StoredProcedure )是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中。用戶通過指定存儲過程的名字并給 出參數(如果該存儲過程帶有參數)來執行它.存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到 存儲過程。優點:允許模塊化程序設計,就是說只需要創立一次過程,以后在程序中就可以調用該過程任意次.允許氈快執行,如果某操作需要執行大量SQL語句或電自執行,存儲過程比SQL語句執行的要快。減少網絡流量,例如一個需要數百行的SQL代碼的操作有一條執行語句完成,不需要在網絡
2、中發送數百行代碼.更好的安全機制,對于沒有權限執行存儲過程的用戶,也可授權他們執行存儲過程。2、Oracle存儲過程怎么創立?存儲過程創立語法:create or replace procedure 存儲過程名(paraml in type, param2 out type)select i n: i () into | rom wliei c Jr ;:二 二n :when others then rollbs:“,,不考前須知:存儲過程參數不帶取值范圍,in表示傳入,out表示輸出在代碼中拋異常用raise+異常名用o.給變量賦值在判斷語句前最好先用count ( *
3、)函數判斷是否存在該條操作記錄變量帶取值范圍,后面接分號3、如何使用Oracle的游標?Oracle中的游標分為顯示游標和附式游標顯示游標是用curs。r.is命令定義的游標,它可以對直詢語句(select)返回的多條記錄進行處理;隱式游標是在執行插入(insert)、刪除(delete)、修改(update)和返回單條記錄的/詢(select)語句時由PL/SQL自動定義的.顯式游標的麋作:翻開游標、操作游標、關閉游標;PL/SQL隱式地翻開SQL游標,并在它內部處理SQL語句,然后關閉它.4、Oracle中字符串用什么連接?Oracle中使用|這個符號連接字符串如abc | d 的結果是a
4、bed.5、Oracle中是如何進行分頁查詢的?Oracle中使用rownum來進行分頁,這個是效率最好的分頁方法,hibernate也是使用rownum來進行Oralce分頁的.6、存儲過程和存儲函數的特點和區別?特點:L 一般來說,存儲過程實現的功能要豆雜一點,而困數的實現的功能針對性比擬強.2、對于存儲過程來說可以返回參數,而函數只能返回值或者表對象.3、存儲過程一般是作為一個獨立的局部來執行,而函數可以作為查詢語句的一個局部來調用,由于函數可以返回一個表對象.因此它可 以在直詢語句中位于FROM關鍵字的后面.區別:L函數必須有返回值,而過程沒有.2、函數可以單獨執行.而過程必須通過ex
5、ecute執行.3、函數可以嵌入到SQL語句中執行,而過程不行。其實我們可以將比校豆雜的直詢寫成函數.然后到存儲過程中去調用這些函數.7、存儲過程與SQL的比照?優勢:1.提高性能SQL語句在創立過程時進行分析和編譯.存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,并給出 懾終被存在系統表中的存儲計劃,這樣,在執行過程時便可節省此開銷.2、陽氐網絡開銷存儲過程調用時只需用提供存儲過程名和必要的參數信息,從而可降低網絡的流JB.3、便于進行代碼移植數據庫專業人員可以隨時對存儲過程進彳亍修改,但對應用程序源代碼卻毫無影哨,從而極大的提高了程序的可移植性.4、更強的安全性
6、(1)可以對過程進行加密,這有助于對源代碼迸行模糊處理.(2 )使用過程參數有助于防止SQL注入攻擊.因為參數輸入被視作文字值而非可執行代碼,所以,攻擊者將命令插入過程內的 Transact-SQL語句并損害安全性將更為困難.(3應通過網絡調用過程時,只有對執行過程的調用是可見的.因此,惡意用戶無法看到表和數據庫對象名稱、嵌入自己的Transact-SQL 語句或搜索關鍵數據。(4)系統管理員可以對執行的某一個存儲過程進行權限限制,防止非授權用戶對數據的訪問.劣勢:L存儲過程需要專門的數據庫開發人員進行維滬,但實際情況是,往往由程序開發員人員兼職.2、設計邏輯變更,修改存儲過程i殳目SQL靈活
7、.8、你覺得存儲過程和SQL語句該使用哪個?在一些高效率或者規范性要求比擬高的工程,建議采用存儲過程.對于一般工程建議采用參數化命令方式,是存儲過程與SQL語句一種折中的方式.對于一些尊法要求比擬高,涉及多條數據凌輯,建議采用存儲過程.9、觸發器的作用有哪些?觸發器可通過數據庫中的相關表實現級聯更改;通過級聯引用完整性約束可以更有效地機行這些更改.觸發器可以強制比用CHECK約束定義的約束更為兔雜的約束。與CHECK約束不同,觸發器可以引用其它表中的列.例如,觸發器可 以使用另一個表中的SELECT比擬插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息.觸發器還可以強制執行業
8、務規那么.觸發器也可以評估數據修改前后的表狀態,并根據其差異采取對策.10、在千萬級的數據庫違詢中,如何提高效率?數據庫設計方面L對查詢進行優化,應盡顯防止全表掃描,首先應考慮在where及order by涉及的列上建立索引.2、應盡量防止在where子句中對字段進行null值判斷,否那么將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num is null可以在num上設置默認值0 ,確保表中num列沒有null fg ,然后這樣查詢:select id from t where num=03、并不是所有索引對杳詢都有效,SQL是根據表中數據來進行面海
9、優化的,當索引列有大國數據田系時,追詢可能不會去利用索引,如 一表中有字段sex , male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用.4、索引并不是越多越好,索引固然可以提高相應的select的效率,但同時也降低了 insert及update的效率,因為insert或update 時有可能會函建索引,所以怎樣建索引需要慎擊考慮,視具體情況而定。一個表的索引數最好不要超過6個,假設太多那么應考慮一些不常 使用到的列上建的索引是否有必要.5、應盡可能的防止更新索引數據列,因為索引數據列的順序就是表記錄的物理存儲順序,一旦該列值改變將導致整個表記錄的酹的調 整,會
10、耗賽相當大的資源,假設應用系統需要頻繁更新索引數據列,那么需要考慮是否應將該索引建為索引.6,盡量使用數字型字段,假設只含數值信息的字段盡量不要設討為字符型,這會降低直詢和連接的性能,并會增加存儲開銷.這是因為引 擎在處理直詢和連接時會逐個比擬字符串中每一個字符,而對于數字型而言只需要t匕較一次就夠了。7、盡可能的使用varchar/nvarchar代替char/nchar,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個 相對蛟小的字段內搜索效率顯然要高些.8、盡At使用衷變國來代替臨時表.如果表變后包含大量數據,請注意索引非常有限(只有主鍵索引).9、防止頻繁創立和刪
11、除臨時表,以減少系統表資源的消耗。10、I臨時表并不是不可使用,適當地使用它們可以使某些例程更有效,例如,當需要至且引用大型表或常用表中的某個數據集時.但是, 對于一次性事件,最好使用導出表.11、在新建I版時表時,如果一次性插入數據量很大,那么可以使用select into代替create table ,防止造成大量log ,以提高速度;如 果數據H不大,為了緩和系統表的資源,應先create table ,然后insert.12、如果使用到了臨時表,在存儲過程的最后務必將所有的臨時表顯式惻除,先truncate table ,然后drop table ,這樣可以防止系統 衷的較長時間鎖定.
12、SQL語句方面L應盡員防止在where子句中使用!=或操作符,否那么將引擎放棄使用索引而進行全表掃描.2、應盡地防止在where子句中使用or來連接條件,否那么將導致引孽放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20 可LUS樣Si : select id from t where num=10 union all select id from t where num=203、in和not in也要慎用,否那么會導致全表掃描,如:select id from t where num in(l,2,3)對于連續的數值,能用betwe
13、en就不要用 in 了 : select id from t where num between 1 and 34、下面的直詢也將導致全表掃描:select id from t where name like %abc%5、如果在where子句中使用參數,也會導致全表掃描,因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇 推遲到運行時;它必須在編譯時進行選擇.然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項. 如下面語句將進行全表掃描:select id from t where num=num可以改為強制查詢使用索引:select id
14、from t with(index(索弓|名) where num=num6、應盡國防止在where子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num/2=100 應改為:select id from t where num=100A27、應盡量防止在where子句中對字段進行函數操作,這將導致引擎放棄使用索引而進行全表掃描.如:select id from t where substring(name,l,3)= abc -name 以 a be 開頭的 id select id from t where date d
15、iff(day,createdate, 2OO5-ll-3O)=O-,2005-11-30 id 應為:select id from t where name like abc% select id from t where createdate=* 2005-11-30 and createdate, 2005-12-118、不要在where子句中的左邊進行函數、算術運算或其他表達式運算,否那么系統將可能無法正確使用索引.9、不要寫一些沒有意義的直詢,如需要生成一個空表結構:select coll,col2 into # t from t where 1=0這類代碼不會返回任何結果集, 但是會消耗系統資源的,應改成這樣:create table # t(.)10、很多時候用exists代替in是一個好的選擇:select num from a where num in(select num from b)用下面的語句替換:select num from a where exists(select 1 from b where num=a.num) 11、任何地方都不要使用select * from t,用具體的字段列表代替,不要返回用不到的任何字段.12、量防止使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆昌吉市教育共同體2025年中考模擬最后十套:生物試題(八)考前提分仿真卷含解析
- 2025年中國機箱前面板數據監測研究報告
- 2025-2030年中國二手汽車行業風險評估及市場運行形勢預測研究報告
- 2025年中國木塑柄雙夾油灰刀數據監測報告
- 2025年中國木制托板數據監測報告
- 2025年中國方型氣壓夾盤市場調查研究報告
- 2025年中國數據采集處理信息系統數據監測報告
- 2025-2030年中國二氧化碳行業發展前景及投資戰略規劃研究報告
- 2025-2030年中國不銹鋼絲市場現狀分析及投資可行性預測報告
- 肇慶市實驗中學高中生物三:免疫調節導學案(第課時)
- 西藏參工參建管理制度
- 知識產權現場審核記錄表模板
- 機械系統動力學試題及答案
- 2024年吉林省中考滿分作文《情味浸潤的時光》4
- 2025年三力反應測試題及答案
- 基于PLC的自動生產線控制系統的設計畢業論文
- 2025年山東能源集團高校畢業生校園招聘筆試參考題庫附帶答案詳解
- 第二十章女性生殖內分泌疾病71課件
- 2025(統編版)語文二年級下冊第三單元解析+任務目標+大單元教學設計
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 侵權責任法知到智慧樹章節測試課后答案2024年秋三亞學院
評論
0/150
提交評論