1,索引为什么能提高查询速度,从DBA以及开发的角度阐述下!2,绑定变量是什么?有何优缺点,在存储过程中在举几个示例! 如果不用绑定变量,该如何实现类似的功能?3,动态sql是什么,语法怎么写,举示例!4,表T(a,b,c,d),以c排序查询第21-31列数据,写出sql,至少2种方式,并且比较下查询效率以及原理。5,写一个存储过程,表A里有3个字段name ,id,dept,name为条件,查询出dept值并且返回。
1,4,5 我做出来了。2跟4没有做,因为忘记了绑定变量以及动态sql怎么写(郁闷,基本功不扎实啊)!声明这都是笔试,不能baidu以及google的!大家谁会做的,留个答案吧,万分感谢啊!

解决方案 »

  1.   

    绑定变量主要是涉及的软硬解析动态SQL
    就是注意'的用法
    执行execute immediate
      

  2.   

    4.
    1.select * from (select rownum rid from t) where rid between 21 and 31;
    2.select * from(select c1.*, row_number() over(order by c DESC) rid from t t1) where rid between 21 and 31;
      

  3.   

    select * from(select c1.*, row_number() over(order by c DESC) rid from t t1) where rid between 21 and 31;不好意思写错了,应该是t1
      

  4.   

    2 绑定变量的实质就是用于替代sql语句中的常量的替代变量。优点: 绑定变量能够重复利用执行计划,提高执行效率。
    绑定变量举例:create or replace procedure quy(p_empno in number)
    as
      begin
         for   i   to   100  
        begin  
         sql:=   select   *   from   student   where   name   ='Robert'   ||   i   ;  
        end   
       commit;
    end; 3 动态SQLexecute immediate 'select * from dual' 
      

  5.   

    1.select * from (select rownum rid from t) where rid between 21 and 31; 
    2.select * from(select c1.*, row_number() over(order by c DESC) rid from t t1) where rid between 21 and 31;
      

  6.   

    http://blog.csdn.net/allanmorgan/archive/2008/08/05/2772090.aspx
    看看这篇文章吧,比我说得清楚多了。
      

  7.   

    4,
    SELECT pair_id, rid
      FROM (SELECT pair_id, ROWNUM rid
              FROM (SELECT   *
                        FROM cbl_pair
                    ORDER BY pair_id))
     WHERE rid BETWEEN 2 AND 3;SELECT *
      FROM (SELECT t.*, ROW_NUMBER () OVER (ORDER BY pair_id) rid
              FROM cbl_pair t)
     WHERE rid BETWEEN 2 AND 3;
      

  8.   


    SELECT pair_id, rid
      FROM (SELECT pair_id, ROWNUM rid
              FROM (SELECT   *
                        FROM cbl_pair
                    ORDER BY pair_id))
     WHERE rid BETWEEN 21 AND 31;SELECT *
      FROM (SELECT t.*, ROW_NUMBER () OVER (ORDER BY pair_id) rid
              FROM cbl_pair t)
     WHERE rid BETWEEN 21 AND 31;
      

  9.   

    邦定变量已经有人回答了,就不说了3,动态sql是什么,语法怎么写,举示例!动态Sql就是说所要执行的Sql语句是非固定的,其中所包含的select lists、from、where都可以因需求的不同而不同,例如Create or replace function Test_DynamicSql (v_Condision varchar2) return varchar2
      as   v_SqlCommand  varchar2(4000);   v_Result      varchar2(10);
    begin
       if v_Condition = 'Testing' then
          v_SqlCommand := 'insert into employee (ID) values (150)';      --这个字符串一定要能拼成能执行的Sql语句       v_Result := 'OK';
       else
          v_SqlCommand := 'delete employee where ID = 150';      v_Result := 'Nothing';
       end if;   execute immediate v_SqlCommand;   commit;   return v_Result;exception
       when others then
            return 'Error'||sqlerrm;
    end;
      

  10.   

    我上面只是举了个简单的例子,当有些需求中,可能所执行的SQL语句几乎相同,可能只是因为某些where子句需要增加/减少之类的,使用动态SQL能够减少代码量,对于维护和阅读还是有一定好处的。
      

  11.   

    转一下别人的回答:
    1,索引带来的方便性是不分DBA和开发者的,oracle的索引能够提供最快获取数据的路径,也是oracle减小磁盘I/O压力的主要途径之一。
    索引的类型有
    b-tree index/bitmap index/function index/patitional index(local/global)等等
    2,绑定变量是指将查询的条件用变量替代,而不是用文本直接书写,因为用静态文本写出来的SQL在不同条件下需要反复解析,而绑定变量后,在查询bind value在运行时传递,然后绑定执行。优点是减少硬解析,降低CPU的争用,节省shared_pool ;缺点是不能使用histogram,sql优化比较困难;另外有时还会导致错误的执行计划。
      

  12.   

    select * from emp where id=:ids;
    :ids就是指绑定变量
      

  13.   

    不能BAIDU,GOOGLE的话很麻烦呃...我对那些关键字是记不住的...