Create table T_Name
(
  id    integer as primary key,
  name  varchar2(254)  
); /* 此表中大约有1000万条数据, 并且保证name是唯一性约束 */v_id   integer;
v_name varchar2(254);有下面的动作:(已对T_Name表中的name字段建立索引)
select NVL(id, 0) into v_id  from T_Name where name = v_name;
这样重复800万次。我发现这个过程占用很多时间,请问还有别的方法吗?

解决方案 »

  1.   

    update T_name set v_id=NVL(id,0) where name = v_name; 
      

  2.   

    我想做的是:
        给定一个name(字符串), 在T_Name中查找它所对应的id,
        如果没找到就赋值为0.
      

  3.   

    这种情况用绑定变量效果会好很多select NVL(id, 0) into v_id  from T_Name where name = :v_name; 
      

  4.   

    绑定变量?
    能不能介绍一下, 呵呵
    Thanks
      

  5.   

    普通语句:
    SELECT fname, lname, pcode FROM cust WHERE id = 674;
    SELECT fname, lname, pcode FROM cust WHERE id = 234;
    SELECT fname, lname, pcode FROM cust WHERE id = 332;含有绑定变量的:
    SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;在sql*plus里面:
    sql> variable x number;
    sql> exec :x := 123;
    sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;
      

  6.   

    select NVL(id, 0) into v_id  from T_Name where name = v_name; 
    他这个应该是用在函数里的吧,如果是函数或者存储过程里本身就是绑定变量的
      

  7.   

    非常感谢 hyrongg
    !!!
      

  8.   

    非常感谢 hyrongg
    !!!
      

  9.   

    非常感谢 hyrongg !!!
      

  10.   

    在程序也可以用ODBC、OCI等来绑定执行,
    效率更高!