最近一个朋友想让我帮他一个忙,看似是一个很简单的小忙,就是出两道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 大家有什么好的建议可以给我留言,也欢迎大家拍砖交流。