select offer_id  into v_offer_id from ls65_crm2.product_offer_t@to_qscrm
        where (offer_name like '%E家%'  or offer_name like '%E9%'  or  offer_name like '%E8%' or 
         offer_name like '%E6%'  )  
在offer_id 中有很多值在很多块中需要用到这个值,所以我想单独吧他提出来,先查询出来放进v_offer_id 中
在其他块中,需要用到这个值在其他块中,能否直接用 product_offer_id = v_offer_id

解决方案 »

  1.   

    有很多值?结果有多条记录的情况下,你这就出错了,select into要成功要保证有且仅有一个值。多个值的情况下,你要用游标。
    其他块的话,不能用这个过程搜出来的值,除非你这个id是放在一个公共包里面的一变量。像你这种情况,可以单独定义一个函数,直接返回这个offer_id的游标,其他要用的地方,直接用游标变量等于这个函数就可以拿出来了。
      

  2.   

    select into必须确保查询出来的记录只能为一条,否则会报错。针对可能出现多条记录的情况,建议使用游标。如果记录为空,使用select into也会出错。
      

  3.   

    你可以把整个写到一个函数中,在需要该值的时候就调用该函数。
    create or replace function test_func
    return varchar2
    as
    v_offer_id varchar2(20);
    begin
    select offer_id  into v_offer_id from ls65_crm2.product_offer_t@to_qscrm 
            where (offer_name like '%E家%'  or offer_name like '%E9%'  or  offer_name like '%E8%' or 
            offer_name like '%E6%'  ) 
    return (v_offer_id);
    exception
    when TOO_MANY_ROWS  then
    dbms_output.put_line('多余一个返回结果!');
    when others then
    dbms_output.put_line(sqlcode||sqlerrm);
    end test_func;