兩道簡單的oracle題目

jeanron100發表於2015-07-09

最近一個朋友想讓我幫他一個忙,看似是一個很簡單的小忙,就是出兩道l題,一道可以難一些,可以透過這道題看出一個開發人員的資料庫水平,sql或者pl/sql都可以,另外一道題需要是一道sql題,可以透過這個題目看出開發人員的sql水平。
問題很簡單,但是要求不簡單,而且透過這兩個題目著實能夠反映得了出題者的水平,所以自己也是斟酌再三,一直沒有定下來這兩道題。
首先這兩道題是面向開發人員的,所以涉及到oracle中體系結構中比較細節的東西也是不太適用的,儘管tom還是一貫希望開發人員能夠儘可能多的熟悉資料庫體系結構,但是從我目前的瞭解來說,開發人員還是更多的把資料庫當做一個黑盒來使用,可能參與一些大型資料分析工作的人來生活,sql水平要高不少,但是可能更傾向於sql語句調優,這個時候和索引還是有很大的關聯,對於出題來說,可能面也有點大,所以斟酌再三,還是出了下面的這道題,是關於pl/sql的,但是和開發聯絡還是比較緊密的。
選出下面的可能存在效能問題的Pl/sql 塊。
1)
declare
cursor test_cur is  select object_id,object_name from t ;
begin
for i in test_cur loop
execute immediate 'insert into t  values(:a,:b)'  using i.object_id,i.object_name;
end loop;
commit;
end;
/
2)
declare
cursor test_cur is  select object_id,object_name from t ;
begin
for i in test_cur loop
execute immediate 'insert into t  values('||i.object_id||','||chr(39)||i.object_name||chr(39)||')';
end loop;
commit;
end;
/
3)
declare
cursor test_cur is  select object_id,object_name from t ;
begin
for i in test_cur loop
insert into t values(i.object_id,i.object_name);
end loop;
commit;
end;

4)
begin
for i in (select object_id,object_name from t) loop
execute immediate 'insert into t  values(:a,:b)'  using i.object_id,i.object_name;
end loop;
commit;
end;
/
這個題目的主要意圖就是希望在寫pl/sql的時候能夠考慮到繫結變數的值,對於sql語句的軟解析,硬解析的一些東西 ,這些方式可能在平時的工作都會涉及到,但是很可能自己沒有注意到其實有些pl/sql塊還是存在著很明顯的效能問題。
這道題目的答案是2

第二道題,是能夠從sql語句看出對方的水平來,自己也是斟酌再三,發現還是以一道比較簡單的題目來考察一下。
對於下面的sql語句,sql語句在解析的時候的順序是?
(1)Select empno,deptno
(2)from emp
(3)where deptno=1001
(4)group by deptno
(5)order by empno,
A. 1,2,3,4,5. 
B. 2,3,4,1,5
C  5,4,3,2,1 
D  2,3,4,5,1

透過這個問題可以看出大家對於一個簡單的sql語句的理解。可以看出哪些操作在前,哪些在後,透過這個也能間接反映出對於sql的理解,這個題目的答案為B
大家有什麼好的建議可以給我留言,也歡迎大家拍磚交流。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1727162/,如需轉載,請註明出處,否則將追究法律責任。

相關文章