代码如下
v_field_id varchar2(10);--列名(包括下面4个都是t_gx_rule_detail中的字段)该字段数据如:nation
v_code_segment_start varchar2(10);--校验码段起始位置(该字段数据数据如:1)
v_code_segment_length varchar2(10);--代码长度(该字段数据数据如:3)
v_code_zone_id varchar2(10);--标准代码集标识(该字段数据数据如:001)
type curs is ref cursor;
cu3 curs;
begin
v_field_id:='nation';
open cu3 for 'select code_segment_start,code_segment_length,code_zone_id from zc.t_gx_rule_detail  where field_id='||v_field_id;
loop
fetch cu3 into v_code_segment_start,v_code_segment_length,v_code_zone_id;
exit when cu3%notfound;问题:
情况1:v_field_id:='nation';
open cu3 for 'select * from zc.t_gx_rule_detail  where field_id='||v_field_id;抱错无效列名
情况2:v_field_id:='1';
open cu3 for 'select * from zc.t_gx_rule_detail  where code_segment_start='||v_field_id;正确通过,可以运行请大虾指教

解决方案 »

  1.   

    open cu3 for 'select * from zc.t_gx_rule_detail  where field_id='||v_field_id;
    改为
    open cu3 for 'select * from zc.t_gx_rule_detail  where field_id=:v1' using v_field_id;
      

  2.   

    简单来讲就是没有关闲游标,死锁.
    select * from zc.t_gx_rule_detail  where code_segment_start='1' --没有记录,没游标死锁之说
    解决方案:
    在exit后加入close cu3;
      

  3.   

    to: njhart2003 用using 不行 因为我没用 immediate。报错说未预期的命令结尾to: beckhambobo(beckham) select * from zc.t_gx_rule_detail  where code_segment_start='1'有记录的,我 说明过我表中这个字段是存放类似1的值的
    field_id='||v_field_id是另外一个字段里面值类似nation说明一下,我用sql语句都查得到记录得请各位再给点意见
      

  4.   

    原因主要是字符型字段的变量值少了单引号!
    open cu3 for 'select * from zc.t_gx_rule_detail  where field_id='''||v_field_id||'''';
    你的后一句变量为数字,oracle会自动转换为字符型的,所以没有报错。
      

  5.   

    也就是说,你的第一个sql对于的查询语句是:
    select * from zc.t_gx_rule_detail  where field_id=nation;
    少了单引号!应该为
    select * from zc.t_gx_rule_detail  where field_id='nation';
    而第二个sql对于的查询语句是:
    select * from zc.t_gx_rule_detail  where code_segment_start=1;
    oracle会自动把sql解析为:
    select * from zc.t_gx_rule_detail  where code_segment_start='1';
    ....