两道简单的oracle题目(r5笔记第91天)
公众号:杨建荣的学习笔记 · 作者:r5笔记第91天 · 发布:2015-07-08 23:35:45 · 原文链接
最近一个朋友想让我帮他一个忙,看似是一个很简单的小忙,就是出两道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
大家有什么好的建议可以给我留言,也欢迎大家拍砖交流。
